Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/waterlink/contracts-rspec
Plugin for contracts.ruby that fixes issues with rspec-mocks.
https://github.com/waterlink/contracts-rspec
Last synced: 3 months ago
JSON representation
Plugin for contracts.ruby that fixes issues with rspec-mocks.
- Host: GitHub
- URL: https://github.com/waterlink/contracts-rspec
- Owner: waterlink
- License: mit
- Created: 2015-04-09T17:59:53.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-04-09T18:14:54.000Z (over 9 years ago)
- Last Synced: 2024-04-26T04:41:26.939Z (8 months ago)
- Language: Ruby
- Homepage:
- Size: 121 KB
- Stars: 2
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Contracts::Rspec
Plugin for [contracts.ruby](https://github.com/egonSchiele/contracts.ruby/) that fixes issues with rspec-mocks.
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'contracts-rspec'
```And then execute:
$ bundle
Or install it yourself as:
$ gem install contracts-rspec
## Usage
Just `require 'contracts/rspec'` and `include Contracts::RSpec::Mocks` into your example group and you will be able to use enhanced `instance_double`:
```ruby
require 'contracts'
require 'contracts/rspec'class Example
include ContractsContract Something => Any
def do_something(something)
something.call
end
endRSpec.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::Mockssubject(:example) { Example.new }
let(:something) { instance_double(Something) }it "works" do
expect { example.do_something(something) }.not_to raise_error
end
end
```## How it works
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:
```ruby
something = instance_double(Something)
allow(something).to receive(:is_a?).with(Something).and_return(true)
```This library only provides a shortcut.
## Contributing
1. Fork it ( https://github.com/waterlink/contracts-rspec/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request