On Fri, Jul 17, 2009 at 1:08 PM, Leo Godin<[email protected]> 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
expression
@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)
PurchaseRequest.stub!(:find).and_return(3)
get :index
assigns(:num_found).should == 3
end
* 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
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users