[rspec-users] Factories vs. stubs/mocks
Justin Ko
jko170 at gmail.com
Mon Aug 30 12:17:11 EDT 2010
On Aug 30, 11:59 am, Brennon Bortz <bren... at brennonbortz.com> wrote:
> I am, as usual, assigning an instance variable in a controller's index action to find all instances of a model in the database. I want to write a spec that checks that this variable is assigned correctly. I can do:
>
> it "should provide a collection of widgets in @widgets" do
> widget = Widget.create("title" => "my widget")
> get :index
> assigns[:widgets].should include(widget)
> end
>
> or:
>
> it "should provide a collection of widgets in @widgets" do
> widget = Factory.create(:widget)
> get :index
> assigns[:widgets].should include(widget)
> end
>
> Is there a better way to do this with a mock model, though?
>
> Thanks,
>
> Brennon Bortz
> Software Researcher
> Dundalk Institute of Technology
> brennon.bo... at casala.ie
> Ph.D. Researcher & Composer - Sonic Arts Research Centre
> Queen's University, Belfast
> bren... at brennonbortz.com / bbort... at qub.ac.uk
>
> _______________________________________________
> rspec-users mailing list
> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
Currently, what you're doing is checking that the Widget model returns
the correct widgets. If you want to isolate your controller spec from
the model, you must stub or mock the model method call in the action.
Example:
it "..." do
widget = mock_model(Widget)
Widget.should_receive(:all).and_return([widget])
get :index
assigns[:widgets].should include(widget)
end
To check that Widget.all does indeed return the correct widgets, I
would spec that behaviour in the Widget model spec.
Hope that helps.
More information about the rspec-users
mailing list