Plugin for contracts.ruby that fixes issues with rspec-mocks.
Add this line to your application's Gemfile:
gem 'contracts-rspec'
And then execute:
$ bundle
Or install it yourself as:
$ gem install contracts-rspec
Just require 'contracts/rspec'
and include Contracts::RSpec::Mocks
into your example group and you will be able to use enhanced instance_double
:
require 'contracts'
require 'contracts/rspec'
class Example
include Contracts
Contract Something => Any
def do_something(something)
something.call
end
end
RSpec.describe Example do
# If you not include this, you will get ContractError, telling you
# that `RSpec::Mocks::InstanceVerifyingDouble` is not a `Something`.
include Contracts::RSpec::Mocks
subject(:example) { Example.new }
let(:something) { instance_double(Something) }
it "works" do
expect { example.do_something(something) }.not_to raise_error
end
end
When you include Contracts::RSpec::Mocks
, you basically make your instance_double
calls additionally stub out :is_a?
message, when received with specified class to return true. Which makes contract succeed.
You can do it yourself simply:
something = instance_double(Something)
allow(something).to receive(:is_a?).with(Something).and_return(true)
This library only provides a shortcut.
- Fork it ( https://github.com/waterlink/contracts-rspec/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request