[rspec-users] How to mock when there seems to be a requirement for chained mocked calls?
David Chelimsky
dchelimsky at gmail.com
Mon Jun 13 21:37:59 EDT 2011
On Jun 13, 2011, at 8:29 PM, S Ahmed wrote:
"How to mock when there seems to be a requirement for chained mocked calls?"
There is no such requirement unless you are imposing it by your own design decisions.
> I want to mock the following:
>
> MyModel.where(".....").last
Why do you want to do this? Is this in a model spec? A controller spec?
> I tried:
>
> MyModel.should_receive(:where).and_return(nil)
>
> but this of course doesn't match the expectation since the call to .last was not mapped in the mock code.
>
> How can I do this?
You _can_ stub (not mock) chains like this:
MyModel.stub_chain(:where, :last).and_return(xxx)
You can also set chained expectations like this (but I wouldn't recommend it):
ar_query = double('ar_query')
ar_query.should_receive(:last).and_return(nil)
MyModel.stub(:where).and_return(ar_query)
HTH,
David
More information about the rspec-users
mailing list