【问题标题】:RSpec, authenticating Devise user in request specsRSpec,在请求规范中验证设计用户
【发布时间】:2013-03-04 21:34:57
【问题描述】:

我正在尝试编写 RSpec 请求规范以测试我的服务 API,为此我需要对用户进行身份验证。 我在网上找到了一些例子,但没有任何效果,目前我被这个困住了:

require "spec_helper"

include Warden::Test::Helpers
Warden.test_mode!

describe "My requests" do

  it "creates an imaginary object" do
    user = FactoryGirl.create(:user)
    login_as(user, :scope => :user)
    post "/my_service", :my_data=> {:some => "data"}
    expect(response.body).to include("success")
  end

end

我得到的错误是:

 ArgumentError: uncaught throw :warden

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails rspec devise warden


    【解决方案1】:

    最简单的方法是:

    spec/rails_helper.rb

    RSpec.configure do |config|
      # ...
      config.include Devise::Test::IntegrationHelpers, type: :request
    end
    

    只需在您的请求规范中使用sign_in。这相当于在系统/功能规范或 Rails 系统/控制器测试中声明 include Devise::Test::IntegrationHelpers

    这样做会导致“更好”的测试。

    【讨论】:

    • 通过应用这个解决方案我得到 [#<0x00005624201db3f8 .9>
    【解决方案2】:

    您需要实际登录用户(即用户需要提交登录表单,或者至少在您的登录操作上执行 POST),如下所述:Stubbing authentication in request spec

    【讨论】:

    • 正如您所见,这正是我尝试使用warden 所做的,但无济于事。
    • 相关答案帮助我找到了另一种可行的方法,非常感谢。
    • @AdnanDoric 知道您神奇地找到了解决方案,让我的问题自行解决。太棒了
    • @AdnanDoric 如果您可以用一些很棒的细节更新您的问题。我在这里遇到同样的问题,任何帮助都会很棒。我想这可能是本杰明的意思。
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2012-03-28
    • 2017-07-08
    • 2019-04-26
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多