[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