[rspec-users] Mocking / stubbing errors for ActiveRecord

Zach Dennis zach.dennis at gmail.com
Thu Feb 19 16:53:21 EST 2009


On Thu, Feb 19, 2009 at 4:24 PM, Matt Wynne <matt at mattwynne.net> wrote:
>
> 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

Why hide them behind a helper? Why not just only specify them in
examples where they are used? ie:

it "should display the book title" do
   @book.stub!(:title).and_return "The Scarlet Letter"
   render ...
   response.should include_text("The Scarlet Letter")
end


>
> Does that help?
>
> Matt Wynne
> http://blog.mattwynne.net
> http://www.songkick.com
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>



-- 
Zach Dennis
http://www.continuousthinking.com
http://www.mutuallyhuman.com


More information about the rspec-users mailing list