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:
- 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