undefined method `authenticate' for nil:NilClass

Hello,

I do still follow the Hartl tutorial.

Am at chapter 6 and according to the manual the test schould be successfull but I see these error messages:

Failures:

  1. User when password doesn’t match confirmation return value of authenticate method with valid password

Failure/Error: it { should eq found_user.authenticate(@user.password) }

NoMethodError:

undefined method `authenticate’ for nil:NilClass

 # ./spec/models/user_spec.rb:91:in `block (5 levels) in <top (required)>'

You can find my code here : https://github.com/roelof1967/sample_app_nutrious/tree/chapter_six

Roelof

You're calling method authenticate nil. You need to look at your call to authenticate, and figure out why the object is nil. (This could easily be caused by a simple typo. Check variable names carefully.)

It seems that you need to create the Devise mapping(If you’re using devise), to fix this you can:

  • Set the devise mapping inside a before block
  • Include Devise test helpers

Here’s a link to the Devise Wiki

Cheers,

Ian

@Ian,

He is not using Devise if he is going through the Hartl tutorial. Scott’s suggestion is the one that should be followed.

Hello,

I checked and double checked it but it looks allright to me.

I even copy/paste it to my files but still no luck.

The problem must be somewhere here:

describe “with a password that’s too short” do
before { @user.password = @user.password_confirmation = “a” * 5 }
it { should be_invalid }
end

describe “return value of authenticate method” do
before { @user.save }
let(:found_user) { User.find_by(email: @user.email) }

describe "with valid password" do
  it { should eq found_user.authenticate(@user.password) }
end

describe "with invalid password" do
  let(:user_for_invalid_password) { found_user.authenticate("invalid") }

  it { should_not eq user_for_invalid_password }
  specify { expect(user_for_invalid_password).to be_false }
end

end
end

Roelof

So... You really can't figure out any reason why found_user would be nil? (Actually, there's lots here that looks suspect. But one step at a time, focus on your current problem.)

Nope,

Otherwise I would not ask here.

user is filled because of this :

before do
@user = User.new(name: “Example User”, email: “user@example.com”,

password: “foobar”, password_confirmation: “foobar”)

end

I wonder if all the end are right here : https://github.com/roelof1967/sample_app_nutrious/blob/chapter_six/spec/models/user_spec.rb

Roelof