rspec_on_rails, could someone provide an example of using mocks/stubs?

View: New views
1 Messages — Rating Filter:   Alert me  

rspec_on_rails, could someone provide an example of using mocks/stubs?

by David Green :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

hi all

I'm still a little uncertain on how to use mocks/stubs with rspec when dealing with associations. I know the point is to isolate the code being tested and remove external dependencies, but I'm not sure how to implement it. Can someone suggest how they would spec the code below:

I have a Book model and Review model

class Book < ActiveRecord::Base
  has_many :reviews

  def update_rating
    new_rating = 0.0
    unless reviews.empty?
      reviews.each {|r| new_rating += r.rating}
      new_rating /= review.size
    end
    update_attribute(:rating, new_rating)
  end

end

The review class is just a standard model with a :rating attribute. Here's the (empty) spec i came up with:

describe Book, ".update_rating" do

  it "should set rating to 0.0 when there are no reviews" do
  end

  it "should set :rating to the average rating when there are reviews" do
  end

end

I know I'm supposed to implement the specs first but I wrote the update_attribute() method here to show the kinds of method calls it would be making. Here's what I think I need to do:

- stub @book.reviews to return a mock object e.g. mock_reviews
- stub mock_reviews.each to return another mock e.g. mock_r
- stub mock_r.rating to return some value

am I on the right track? it seems like a lot of preparation for such a simple test. Is there a better way?
thanks

dave