【问题标题】:uncaught throw :warden in Devise Testing未捕获的投掷:设计测试中的守望者
【发布时间】:2012-02-28 13:24:54
【问题描述】:

我刚刚开始测试 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

【问题讨论】:

  • 您找到解决此问题的方法了吗?
  • @Zabba,是的,我刚刚取消了从工厂加载的用户,主要是,我做了两件事。 1) 确保这不是集成测试,2)ControllerMacros 调用函数 login_user

标签: ruby-on-rails testing rspec devise warden


【解决方案1】:

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

如果你使用confirmable模块,别忘了确认用户,否则会抛出Warden异常。对您的代码进行适当的更改是:

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找到

【讨论】:

  • 顺便说一句,您可以将user.confirm! 用作confirmed_at 和保存的简写。
  • 很棒的发现,这个答案需要被接受@ktkaushik
  • 我的夹具有问题:这个可以工作gist.github.com/henrydjacob/1344451
  • @jbnunn 完成!晚了将近 2 年,但迟到总比没有好。对不起。 :)
  • 如果您使用夹具,您只需将confirmed_at: 2017-08-01 添加到您要尝试的模型的夹具login_as
【解决方案2】:

uncaught throw :wardenauthenticate_user! 失败时发生。

找出您的用户身份验证失败的原因,您就会解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多