未捕获的投掷:设计测试中的监狱长

我刚刚开始测试Devise。 我无法理解为什么我会收到此错误::

Failure/Error: subject.current_user.should_not be_nil ArgumentError: uncaught throw :warden 

这是我的规范中的代码::

  require "spec_helper" describe Devise::PasswordsController do include Devise::TestHelpers before(:each) do user = Factory(:user) @request.env["devise.mapping"] = Devise.mappings[:user] sign_in user end it "should have a current user" do subject.current_user.should_not be_nil end end 

有没有人解决这个问题? 我知道github上存在问题,但在他们的情况下include Devise::TestHelpers不存在与我的情况不同。

我在这一行收到错误:: subject.current_user.should_not be_nil

我看到这是一个非常古老的问题,但我遇到了类似的问题。 这对我有所帮助。

如果您使用的是可confirmable模块,请不要忘记确认用户,否则会抛出Wardenexception。 对代码进行适当的更改将是:

 before(:each) do user = Factory(:user) user.confirmed_at = Time.zone.now user.save @request.env["devise.mapping"] = Devise.mappings[:user] sign_in user end 

更多信息可以在Devise Wiki中找到

uncaught throw :warden发生在authenticate_user! 失败。

弄清楚为什么用户的身份validation失败,您将解决您的问题。