0

我都在试图理解这里发生的事情:
Devise.friendly_tokenUser工厂使用。

FactoryGirl.define do
  factory :user do
    email "user@example.com"
    password "secret"
    authentication_token Devise.friendly_token
  end
end

在一些测试中,我使用工厂如下:

require 'spec_helper'

describe SessionsController do

  before do
    @user = User.gen!
    puts "Token = #{@user.authentication_token}" # <--- debugging output
  end

  describe "#create" do
    context "when sending ..." do
      it "renders a json hash ..." do
        api_sign_in @user
        expect(last_response.status).to eq(201)
      end
    end

    context "when sending ..." do
      it "renders a json hash ..." do
        user = User.gen!(email: "invalid@email.com")
        puts "Token2 = #{user.authentication_token}" # <--- debugging output
        api_sign_in user
        expect(last_response.status).to eq(422)
      end
    end
  end

  describe "#destroy" do
    context "when sending ..." do
      it "renders a json hash ..." do
        api_sign_out @user
        expect(last_response.status).to eq(200)
      end
    end
  end

end

调试输出显示令牌在每次调用时都是相同的哈希值。奇怪的!当我在控制台中进行测试时,它会在每次执行Devise.friendly_token时生成一个随机散列。这就是我期望看到的实现

我想有一个主要的设计问题......请帮帮我。

4

1 回答 1

3

这一行:

authentication_token Devise.friendly_token

初始化工厂时只会调用Devise.friendly_token一次。你要

authentication_token { Devise.friendly_token }

每次FactoryGirl创建对象时都会评估块。

于 2013-09-11T10:59:10.273 回答