[rspec-users] find_all_by returning nil

David Chelimsky dchelimsky at gmail.com
Mon Aug 11 16:00:04 EDT 2008


On Mon, Aug 11, 2008 at 2:49 PM, John Mark <lists at ruby-forum.com> wrote:
> David Chelimsky wrote:
>> On Mon, Aug 11, 2008 at 1:47 PM, John Mark <lists at ruby-forum.com> wrote:
>>>
>>> Sorry that was a typo
>>>
>>> Its actually stub! in my code
>>
>> The original example doesn't seem to do anything:
>>
>> 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)
>> 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?

> I have created a new application with only the above 2 models and the
> rspec is working ok. It appears there are some extra information in my
> real application that is making it not to work properly. I have to
> investigate further on this.
>
> The error I am getting is.
> "You have a nil object when you didn't expect it!
> You might have expected an instance of Array.
> The error ocurred while evaluating nil.each"
>
> aand the error line is line 2 below in the Product model
> 1. products = find_all_by_category_id(category_id)
> 2. products.each do |product|
>
>
> Perhaps what I need answered for now is what could cause rspec return
> nil for an activerecord method that is supposed to return an array?
>
>
> Thanks
> Mark
>
> --
> Posted via http://www.ruby-forum.com/.
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>


More information about the rspec-users mailing list