[rspec-users] Mocking / stubbing errors for ActiveRecord

Matt Wynne matt at mattwynne.net
Thu Feb 19 16:24:09 EST 2009


On 19 Feb 2009, at 20:54, Martin wrote:

> Hi,
>
> I'm trying to test my views using rspec. I want to test my edit- and  
> new-view also for the case an error occurs (something like "title  
> can't be blank" and so on).
> Can someone point me please to an example where I can see how to  
> mock my   model and stub all methods needed for the view?

I guess this isn't exactly what you want to hear, but I would counsel  
you against mocking your whole model object for a form with lots of  
fields - those kind of 'broad' mocks can be very brittle to changes in  
your domain model.

Can you try using stub_model instead? This creates an instance of your  
actual model class, but with a crippled database connection. You can  
then create an invalid model object and throw it to the view.  
Something like:

assigns[:book] = stub_model(Book, :title => '')

If your model is at all interesting, you might want to keep the  
attributes that make a valid Book somewhere:

valid_book = {
   :title => "Test Book Title",
   :author => "Test Author"
}
assigns[:book] = stub_model(Book, valid_book.merge(:title => ''))

I generally hide these behind a helper method, like

def stub_book(attributes = {})
   stub_model Book, {
     :title => "Test Book Title",
     :author => "Test Author"
   }.merge(attributes)
end

Does that help?

Matt Wynne
http://blog.mattwynne.net
http://www.songkick.com



More information about the rspec-users mailing list