我有一个简单的用户工厂,如下所示:
FactoryGirl.define do
factory :user do
name "jeff"
email "jeff@lint.com"
password "foobar"
password_confirmation "foobar"
end
end
我正在尝试测试内置的authenticate
方法,如下所示:
describe "return value of authenticate method", focus: true do
before do
create(:user)
end
let(:found_user) { User.find_by_email(:email) }
it "can return value of authenticate method" do
expect(:user).to eq found_user.authenticate(:password)
end
end
我得到的错误是
NoMethodError:
undefined method `authenticate' for nil:NilClass
这可能意味着found_user
返回零。但我不明白为什么。当我在控制台上尝试此代码时,它工作得很好。那么我做错了什么?我是Factory Girl的新手。
我还在寻找的是在不使用实例变量的情况下实现这一目标。
答案 0 :(得分:1)
describe "return value of authenticate method", focus: true do
before do
@user = FactoryGirl.create(:user)
end
let(:found_user) { User.find_by_email(@user.email) }
it "can return value of authenticate method" do
expect(:user).to eq found_user.authenticate(:password)
end
end
有人可以建议更好的RSpec方式来做到这一点,但它会让你的测试工作。
答案 1 :(得分:1)
试试这个
describe "return value of authenticate method", focus: true do
before do
@user = FactoryGirl.create(:user)
end
let(:found_user) { User.find_by_email(@user.email) }
it "can return value of authenticate method" do
expect(@user).to eq found_user.authenticate(@user.password)
end
end