[rspec-users] find_all_by returning nil

John Mark lists at ruby-forum.com
Mon Aug 11 16:24:02 EDT 2008

David Chelimsky wrote:
> On Mon, Aug 11, 2008 at 2:49 PM, John Mark <lists at ruby-forum.com> wrote:
>>>   product = mock_model(Product, :id => 1, :category_id => 1)
>>>   Product.stub(!find_all_by_category_id).with(anything()).and_return([product])
>>>   Product.should_receive(:find_all_meeting_some_criteria_for_category).with(product.category_id)
>>> end
>>> It just sets up some objects but never actually calls an action. What
>>> is the error message you're getting?
>> Sorry again I forgot to add the last statement.
> Can't really help you if you're submitting code that is different from
> the code that is causing you trouble. Please be more careful about
> this.
>> Here is how the code
>> should have looked like
>>  it "should find products given a category" do
>>   product = mock_model(Product, :id => 1, :category_id => 1)
>>   Product.stub!(:find_all_by_category_id).with(anything()).and_return([product])
>>   Product.should_receive(:find_all_meeting_some_criteria_for_category).with(product.category_id)
>>   Product.find_all_meeting_some_criteria_for_category(product.category_id)
>>  end
> OK - so here, the 2nd to last line sets an expectation that Product
> should receive : find_all_meeting_some_criteria_for_category with
> product.category_id, and then the last line makes that exact call.
> This means that none of your actual code is being executed here. Is
> that really what you have?

Thanks David for the effort you are making to address my questions. Next 
time I will definitely run the examples I am wrting here before I post 
Yes the actual code gets called and thats where the nil error is getting 
generated from.

The code works ok for a simple application with only the Product and 
Category model. The real code has a lot of associations and other 
complex logic which I did not want to post here as they will hide the 
problem I am trying to solve.

I will investigate it further since now I know the problem could be 
caused by something else other than rspec.

It just looks as if (based on logs) that no database call is made in the 
real application when I make this call with rspec (although it works ok 
without rspec)
products = find_all_by_category_id(category_id)
The error is generated in the statement following the above statement
products.each do |product|
saying products is nil

Posted via http://www.ruby-forum.com/.

More information about the rspec-users mailing list