Тестовая установка Rails, вызывающая UncaughtThrowError надзирателя

Я пытаюсь адаптировать предварительный модульный тест, чтобы убедиться, что неподтвержденный пользователь не вошел в систему и перенаправлен на страницу входа с сообщением devise.failure.unconfirmed. Я постоянно сталкиваюсь с ошибкой надзирателя. Я знаю, что могу избавиться от ошибки, подтвердив пользователя, но это противоречит цели теста. Я полагаю, что эта версия devise включает в себя соответствующую настройку теста надзирателя в файле Integration_helpers.rb (warden.test_mode! и т. д.) devise.

Тестовый код генерирует: UncaughtThrowError: uncaught throw :warden

Эквивалентные действия в браузере localhost:3000 генерируют: 401 с телом ответа devise.failure.unconfirmed, которое отображается, как и ожидалось.

users_controller_test.rb

require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
include Devise::Test::IntegrationHelpers
  test "should redirect index when not confirmed" do
    sign_in User.create!(name: 'Bob', email: '[email protected]', password: 'password', password_confirmation: 'password)
    get users_path
  end
end

test_helper.rb

require File.expand_path('../../config/environment',__FILE__)
require 'rails/test_help'

class ActiveSupport::TestCase
  fixtures :all
end

user.rb

class User < ApplicationRecord
  devise :lockable, :confirmable, :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

  validates :name, presence: true, length: { maximum: 50 }
...
end

версии: разработка 4.4.1, рельсы 5.1.4, рубин 2.5.0


person Heather V.    schedule 07.02.2018    source источник


Ответы (1)


Я получаю ту же ошибку. Поскольку в вашей пользовательской модели есть :confirmable, вы также должны заполнить confirmed_at или подтвердить пользователя каким-либо другим способом. Я использую светильники, поэтому это будет выглядеть так.

valid_user:
    email: [email protected]
    encrypted_password: foobar
    confirmed_at: 01/01/2018

Я пытаюсь поймать эту ошибку надзирателя, но безуспешно.

person Alberto Sabaini    schedule 23.03.2018