7

我正在尝试编写 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

谢谢您的帮助。

4

2 回答 2

10

最简单的方法是:

规范/rails_helper.rb

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

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

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

于 2018-05-19T23:39:09.950 回答
4

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

于 2013-03-05T03:03:10.960 回答