On Nov 2, 2011, at 12:01 PM, Rob Aldred wrote: > > I'm pretty sure this has probably been discussed before. > I'm using couchdb (couchrest_model) > > When speccing my controller i want to set expectations that im calling my > couch views correctly. > The query interface has recently been updated to work very similar to ARel > > This means i have to rewrite some of my specs. > > Old call: > > Exam.by_created_at_and_not_archived(:start_key => [@exam.created_at], > :endkey => ['0'],:limit => 2) > > I set an expectation on that easily like so: > > Exam.should_receive(:by_created_at_and_not_archived). > with(:startkey => [@exam1.created_at],:endkey => ['0'],:limit => 2). > and_return([@exam1,@exam2]) > > However the new api i doesn't seem that easy to work with: > > > Exam.by_created_at_and_not_archived.startkey([@exam.created_at]).endkey(['0']).limit(2) > > I could use stub_chain, but that doesn't allow me to check the params being > passes to the calls other than the last. > I could also create a wrapper method on my Exam model that is called from the > controller with hash params, > however that just shifts the problem, I then have to check the expections in > the model spec instead. > > Suggestions on how best to go about that would be appreciated. > > > > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users
Exam.should_receive(:by_created_at_and_not_archived).and_return( double('startkey').tap {|startkey| startkey.should_receive(:startkey).with([@exam.created_at]).and_return( double('endkey').tap {|endkey| endkey.should_receive(:endkey).with(['0']).and_return( double('limit').tap {|limit| limit.should_receive(:limit).with(2).and_return([@exam1, @exam2]) } ) } ) } ) LOL, this is the ugliest code I've written all year. You'd might want to use variables for readability: endkey = double('endkey') startkey = double('startkey') startkey.should_receive(:start key).with([@exam.created_at]) { endkey } _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users