On Aug 30, 11:59 am, Brennon Bortz <bren...@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...@casala.ie
> Ph.D. Researcher & Composer - Sonic Arts Research Centre
> Queen's University, Belfast
> bren...@brennonbortz.com / bbort...@qub.ac.uk
>
> _______________________________________________
> rspec-users mailing list
> rspec-us...@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.
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to