Expectations in a RSpec before filter
Expectations in a RSpec before filter
Last week I found a piece of code which put expectations (for example
should_receive
or the likes) in before filters in your spec file. I
believe this is not correct in subtle ways.
- A before filter is meant to define the ‘world’ your RSpec is going
to run in. Not to set expectations. These go into
it
blocks. - Besides that, when putting expectations in a
before
filter, the expectation is needlessly checked everit
block. Imagine the expectation not being met. All of the sudden all your specs turn red. I’d rather see a specific spec fail so I immediately know where to look.
So I’m suggesting to put no expectations in your before
filters and if
you feel the urge to do so it probably needs it’s own it
block.
An example of how it should be done:
describe "foo" do
before do
some_object.stub(:some_method).and_return(:some_value)
end
it "manipulates the object" do
some_object.should_receive(:some_method).with(:some_argument)
some_invocation
end
end