On Jun 13, 2011, at 9:44 PM, S Ahmed wrote: > On Mon, Jun 13, 2011 at 9:37 PM, David Chelimsky <dchelim...@gmail.com> wrote: > 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)
[I moved your post to the bottom] > This is a method in my Model that I am writing a test for correct. > > There are allot of if/else clauses in the method, and i want to make sure > certain things are called so I want to write expectations for it. > > Not sure why you don't recommend such a thing? (chained expectations) Because they are brittle. You can specify the externally observable behavior of a model without mocking its internals. This is _not_ the same as setting expectations on model methods called from controllers, in which case we're specifying how one component (the controller) talks to another component (the model). In a model spec, the model _is_ the component being specified. That all make sense? HTH, David
_______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users