[rspec-users] Mocking Rails association collections

Paul psadauskas at absolute-performance.com
Wed Jul 18 16:48:18 EDT 2007

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)

  @article = mock_model(Article)

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 => 

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?

Paul Sadauskas

More information about the rspec-users mailing list