Introducing rspec-block_is_expected
Allows you to use block_is_expected similarly to how you would use is_expected if a block was wrapping the subject.
This gem does one very simple thing very well. It allows you to use block_is_expected similarly to how you would use is_expected if a block was wrapping the subject. Supports the same versions of Ruby that RSpec does, 1.8.7 - current ruby-head, as well as the JRuby equivalents.
subject { Integer(nil) }
it('raises') { block_is_expected.to raise_error(TypeError) }
If you only ever want to test subjects wrapped in blocks, and are comfortable with losing the standard is_expected behavior, see an alternative to this gem here.
Installation
Add this line to your application’s Gemfile:
gem 'rspec-block_is_expected', group: :test
And then execute:
$ bundle
Or install it yourself as:
$ gem install rspec-block_is_expected
Configuration
There is no configuration needed if you your test suite loads the bundle group (e.g. test) that you added the gem to.
Otherwise, you may load it manually near the top of your spec_helper.rb, and it will self configure.
require 'rspec/block_is_expected'
Usage
The spec suite for this gem has some examples of usage, lightly edited here.
RSpec.describe 'TestyMcTest' do
context 'errors raised' do
subject { Integer(nil) }
it('can be tested') do
# Where you used to have:
# expect { subject }.to raise_error(TypeError)
block_is_expected.to raise_error(TypeError)
end
end
context 'execution' do
let(:mutex) { Mutex.new }
subject { mutex.lock }
it('can change state') do
expect(mutex.locked?).to eq(false)
# Where you used to have:
# expect { subject }.to_not raise_error
block_is_expected.to_not raise_error
expect(mutex.locked?).to eq(true)
end
end
context 'changed state' do
let(:mutex) { Mutex.new }
subject { mutex.lock }
it('can be tested') do
# Where you used to have:
# expect { subject }.to change { mutex.locked? }.from(false).to(true)
block_is_expected.to change { mutex.locked? }.from(false).to(true)
end
end
end
comments powered by Disqus