Rails测试设置导致warden的UncaughtThrowError

时间:2018-02-07 18:47:10

标签: ruby-on-rails testing devise warden

我正在尝试调整预先设计的单元测试,以确保未确认的用户未登录并使用devise.failure.unconfirmed消息重定向到登录页面。我一直遇到一个监狱长的错误。我知道我可以通过确认用户来摆脱错误,但这会破坏测试的目的。我相信这个版本的设计包括设计的integration_helpers.rb(warden.test_mode!等)中的相关warden测试设置。

测试代码生成: 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: 'bob@bob.com', 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,rails 5.1.4,ruby 2.5.0

1 个答案:

答案 0 :(得分:0)

我收到同样的错误。由于您的用户模型中有:confirmable,因此您也应填写confirmed_at,或通过其他方式确认用户。我使用灯具,所以它看起来像这样。

valid_user:
    email: user@example.com
    encrypted_password: foobar
    confirmed_at: 01/01/2018

我试图抓住那个没有运气的警告错误