Bogus aims to make your unit tests more reliable by ensuring that you don't stub or mock methods that don't actually exist in the mocked objects.
class PostRepository def store(title) # save a new post in the database end end class PostAdder < Struct.new(:post_repository) def add(title) post = post_repository.store(title) # do some stuff with the post end end require 'bogus/rspec' describe PostAdder do fake(:post_repository) it "stores the post" do post_adder = PostAdder.new(post_repository) post_adder.add("Bogus is safe!") expect(post_repository).to have_received.store("Bogus is safe!") end end
- Safe Stubbing - Bogus does not allow you to stub methods that don't exist or don't match the stubbed signature.
- Fakes - test doubles that have the same interface as the doubled class.
- Support for ActiveRecord models - Bogus comes with support for active record fields out of the box.
- Global fake configuration - Decouple your fakes from class names and define default return values in one place.
- Contract tests - a unique feature of Bogus, which reduces the need for integrated tests to a minimum by ensuring that the things you stub match how the object really behaves.
MIT. See the LICENSE file.