On 7/18/07, Paul <[EMAIL PROTECTED]> wrote: > Rails model association collections allow you to do nifty things like: > > article.comments.find(:all, :conditions => {:created_at > 1.day.ago}) > > Has anyone found a good way to mock this up? I'm currently doing this: > > @comment1 = mock_model(Comment) > comments = mock(Array) > comments.stub!(:find).and_return([EMAIL PROTECTED]) > > @article = mock_model(Article) > @article.stub!(:comments).and_return(comments) > > I don't like this, because of that intermediate 'comments' object, whose > only purpose is so that i can stub the chained method. I'd like to do > something like this: > > @comment1 = mock_model(Comment) > > @article = mock_model(Article, :comments => mock(Array, :find => > [EMAIL PROTECTED])) > > But trying this causes an error: "Mock 'Array' received unexpected > message :find with (:all, ...)" because you can't inline stubs with > ordinary `mock`. I can replace it with `mock_model`, but this feels unclean. > > Has anyone come across a good 'best-practice' solution to this problem?
You can use the stub() method instead of mock() to inline method stubs: @article = mock_model( Article, :comments => stub(Array, :find => [EMAIL PROTECTED]) ) The mock() method works differently because it does different stuff w/ the Hash under the covers. > > TIA, > Paul Sadauskas > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users