Devise.friendly_token постоянно возвращает одинаковый хеш

Я все перепутал, пытаясь понять, что здесь происходит:
я использую Devise.friendly_token в User завод.

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 в консоли он генерирует случайный хеш при каждом выполнении. Это то, что я ожидаю, глядя на реализацию.

Я предполагаю, что есть главная проблема дизайна... Пожалуйста, помогите мне.

1 ответ

Решение

Эта строка:

authentication_token Devise.friendly_token

позвоню Devise.friendly_token только один раз, когда фабрика инициализирована. Ты хочешь

authentication_token { Devise.friendly_token }

который будет оценивать блок каждый раз, когда объект создается FactoryGirl.

Другие вопросы по тегам