On 2010-03-20 12:17 PM, David Chelimsky wrote:
2. Setup context in before blocks, not expectations
We want the example names to express the intent of each example.
The before block in the "with valid id' context sets two expectations,
and then each example sets one of its own. If "should_not_assign_to
:message" fails because Message didn't receive :find_by_id, the
failure has nothing to do with the intent expressed by that example.
Same goes for @message.should_receive(:destroy).
If you want those expectations to be part of the spec, then add
examples for them. If you don't care that they are specified, then
don't. Either way, prefer stub() over should_receive() in before
blocks.
I just remembered why I started putting .should_receive in the setup. It
was because I use Remarkable and I had the action (post :create, get
:new, whatever) in the before block. Here's an example from what I'm
working on today:
http://gist.github.com/340458
Before I started using Remarkable, I think I would have put the
expectation in an example (I can't remember how much I used
should_receive at that point, so I don't know for sure). When I started
using Remarkable, I ran into the issue of needing to set the expectation
before the action was performed, so I moved it into the setup. I had
forgotten that until today when I was merrily moving the expectations
back to examples and only having the stub in the setup.
So now my dilemma is to
1) continue doing it the way I have been even though it's not "proper"
2) wrap the Remarkable macros in a context so I can use a before block
to execute the action
3) stop using Remarkable
4) some other solution I'm not currently aware of
Funny enough, I'm actually leaning toward #3.
Thoughts?
Peace,
Phillip
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users