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

On Jul 21, 2014, at 10:19 AM, Roelof W. [email protected] wrote:

undefined method `authenticate’ for nil:NilClass

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.)


Scott R.
[email protected]
http://www.elevated-dev.com/
(303) 722-0567 voice

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
https://github.com/plataformatec/devise#test-helpers

Cheers,
Ian

2014-07-21 9:26 GMT-07:00 Scott R. [email protected]:

@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

Op maandag 21 juli 2014 18:43:04 UTC+2 schreef Eric S.:

Nope,

Otherwise I would not ask here.

user is filled because of this :

before do
@user = User.new(name: “Example User”, email: “[email protected]”,
password: “foobar”, password_confirmation:
“foobar”)

end

Op maandag 21 juli 2014 19:09:47 UTC+2 schreef Scott R.:

On Jul 21, 2014, at 10:53 AM, Roelof W. [email protected] wrote:

it { should be_invalid }
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

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.)


Scott R.
[email protected]
http://www.elevated-dev.com/
(303) 722-0567 voice

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

Op maandag 21 juli 2014 19:23:09 UTC+2 schreef Roelof W.: