首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rspec测试sign_in (Devise)与请求和rswag有关的问题

Rspec测试sign_in (Devise)与请求和rswag有关的问题
EN

Stack Overflow用户
提问于 2021-03-07 17:03:19
回答 2查看 1.4K关注 0票数 2

我很想在rspec中使用rswag来记录REST和同时编写测试。我正在尝试放松教程和文档,但我无法让sign_in端点工作( 设计-会议 )。

当我运行rspec时,我会收到状态代码错误。

代码语言:javascript
复制
require 'swagger_helper'
require 'rails_helper'
require 'shared_context'

describe 'Sonaaar REST API', type: :request do

...

  path '/users/sign_in' do
    post 'Sign In' do
      tags 'Session'
      consumes 'application/json'
      produces 'application/json'
      parameter name: :user, in: :body, schema: {
        type: :object,
        properties: {
          email: { type: :string },
          password: { type: :string },
        },
        required: ['email', 'password']
      }

     response '201', 'sign in', { 'HTTP_ACCEPT' => "application/json" } do
         response '201', 'sign in', { 'HTTP_ACCEPT' => "application/json" } do
        #
        # let(:user) do
        #   create(:user,  email: 'email@domain.com', password: 'Password1')
        # end
        #Error
        # Failure/Error:
        #        raise UnexpectedResponse,
        #          "Expected response code '#{response.code}' to match '#{expected}'\n" \
        #            "Response body: #{response.body}"
        #
        #      Rswag::Specs::UnexpectedResponse:
        #        Expected response code '401' to match '201'
        #        Response body: {"error":"You need to sign in or sign up before continuing."}


        let(:user) { { user: { login: 'email@domain.com', password: 'Password1' } } }
        # Rswag::Specs::UnexpectedResponse:
        #   Expected response code '401' to match '201'
        #   Response body: {"error":"You need to sign in or sign up before continuing."}
        #   /Users/filip/.rvm/gems/ruby-2.7.1/gems/rswag-specs-2.4.0/lib/rswag/specs/r
        run_test!
      end

比我有RSpec错误:

代码语言:javascript
复制
1) Sonaaar REST API /users/sign_in post sign in returns a 201 response
     Failure/Error:
       raise UnexpectedResponse,
         "Expected response code '#{response.code}' to match '#{expected}'\n" \
           "Response body: #{response.body}"

     Rswag::Specs::UnexpectedResponse:
       Expected response code '401' to match '201'
       Response body: {"error":"You need to sign in or sign up before continuing."}

身份验证:JWT-令牌内容类型: application/json Stack/Gems:

EN

回答 2

Stack Overflow用户

发布于 2021-03-09 12:04:08

请求规范需要更多帮助,而不仅仅是为特性规范工作的普通监狱长助手:

代码语言:javascript
复制
RSpec.configure do |config|
  config.include Warden::Test::Helpers
end

添加到rails_helper或其他文件,并在rails_helper中要求:

代码语言:javascript
复制
module DeviseRequestSpecHelpers

  include Warden::Test::Helpers

  def sign_in(user)
    login_as(user, scope: :user)
  end

  def sign_out
    logout(:user)
  end

end

然后在rails_helper中添加

代码语言:javascript
复制
RSpec.configure do |config|
  config.include DeviseRequestSpecHelpers, type: :request
end

您现在应该可以在请求规范中使用以下内容登录:

代码语言:javascript
复制
context 'some context' do
  scenario 'some scenario' do
    login_as(user)
  end
end
票数 1
EN

Stack Overflow用户

发布于 2022-01-19 15:14:27

就像萨姆说的,但实际上你可以把狱警的帮手也包括进来

代码语言:javascript
复制
RSpec.configure do |config|
  config.include Warden::Test::Helpers
end

然后

代码语言:javascript
复制
let(:admin) { create(:admin) } # for this case it's devise :admins

before do
  login_as(admin, scope: :admin)
end

# If you want to logout admin
after do
  logout(:admin)
end

it 'should return 200 'do
   get 'some_path_that_needs_session'
   expect(response).to have_http_status(200)
end

您可以参考监狱长::测试::帮手文档

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66519091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档