如何使用rspec和工厂女孩设置我的身份验证数据?

时间:2013-01-19 18:12:19

标签: ruby-on-rails-3 authentication testing rspec factory-bot

我有一个简单的用户工厂,如下所示:

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的新手。

我还在寻找的是在不使用实例变量的情况下实现这一目标。

2 个答案:

答案 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