[rspec-users] testing controller instance variables

Rick DeNatale rick.denatale at gmail.com
Fri Jul 17 15:25:52 EDT 2009

On Fri, Jul 17, 2009 at 1:08 PM, Leo Godin<leogodin217 at gmail.com> wrote:
> Thanks,
> That works at least to the point where it is testing the variable.
> However, it is calling it NIL.  How do I tell the test to make it be
> 3?
> In the controller I have:
>  @num_found = @purchase_requests.size
> This is what I tried in the spec:
>  it "should count the number of purchase requests found" do
>    @purchase_requests.stub!(:size).and_return 3
>    get :index
>    assigns(:num_requests).should == 3
>  end
> This is the error:
> 'PurchaseRequestsController Get index should count the number of
> purchase requests found' FAILED
> expected: 3,
>     got: nil (using ==)
> ./spec/controllers/purchase

Well first off the instance variable that your controller method is
setting is @num_found, not @num_requests. So that't the first problem.

Then the @purchase_requests IV will refer to a different object when
you stub it than after it gets set in your method. So @num_requests is
going to be set to the size* of the association returned by the

 @purchase_requests = PurchaseRequest.find(:all)

>From your initial post.

One tack to take is to stub the PurchaseRequest class itself:

it "should count the number of purchase requests found" do
   purchase  = mock("purchase_requests", :size => 3)
   get :index
   assigns(:num_found).should == 3

* I prefer to use length rather than size in Ruby because size
sometimes means the number of elements, and sometimes something else
like the number of bytes, depending in the receiver object.

Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Twitter: http://twitter.com/RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale

More information about the rspec-users mailing list