1

次のような単純なユーザー ファクトリがあります。

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_usernil を返すことを意味します。しかし、私はその理由を理解していません。このコードをコンソールで試すと、問題なく動作します。それで、私は何を間違っていますか?私はFactory Girlを始めたばかりです。

私が探しているのは、インスタンス変数を使用せずにこれを正しく行うことです。

4

2 に答える 2

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 の方法を提案できますが、それはあなたのテストを機能させるでしょう。

于 2013-01-19T19:04:28.433 に答える
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
于 2013-01-19T19:24:16.170 に答える