Stumped with nil Class error

I’m really, really confused about the use of instance variables in my
controller and their relationship to my controller spec.

I’m trying to spec a controller that has a before_filter :require_member
(it’s Authlogic and set up in ApplicationController. It in turn calls
current_member - which returns/creates the @member variable ) and a
before_filter :find_product

The find_product method is thus …

def find_product
@product = (params[:id]) ? @member.products.find(params[:id]) :
Product.new
end

No matter what I try and in what order, I get the error message …

NoMethodError in ‘ProductsController PUT edit Product cut-off has passed
creates a product object’
undefined method `products’ for nil:NilClass

and it points to the find_product method and it’s the @member that is
nil

I thought that the controller.stub(:require_member).and_return(member)
would
suffice for the require_member stuff but I’m obviously wrong. I’ve even
replaced the member for @member in my spec but to no avail.

Here’s the describe example …

describe “PUT edit” do
context “Product cut-off has passed” do
let(:member) { mock_model(Member).as_null_object }
let(:product) { mock_model(Product).as_null_object }

  ## I just want it to create a @product object from
  it "creates a product object" do
    controller.stub(:require_member).and_return(member)
    member.should_receive(:products)
    get :edit, :id => "1"
  end
end

end

If anyone would be able to untangle me, I’d be greatly appreciative.

CIA

-ants

Hi,

On Sat, Jan 8, 2011 at 01:58, Ants P. [email protected]
wrote:

controller.stub(:require_member).and_return(member)
member.should_receive(:products)
get :edit, :id => “1”
end
end
end
If anyone would be able to untangle me, I’d be greatly appreciative.

Your stub returns member, but require_member sets the @member instance
variable. Try modifying your stub to something like this (untested):

controller.stub(:require_member) { assigns(:member) = member }

HTH,
Mike

Thanks for the reply but I’ve sorted it. I implemented this
http://iain.nl/2008/11/authlogic-is-awesome/

http://iain.nl/2008/11/authlogic-is-awesome/I think the instance
variables
in this example replicate how they will look in the actual controller
(thus
enabling me to stub them/set message expectations.

Anyway, I eventually got it working and can now press on.

Again, thanks for taking the time to reply.