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.