Rswag结合RSpec测试Devise-JWT的/users/sign_in接口报401错误
Rswag对接Devise JWT登录接口测试异常
项目基础环境
- 框架与依赖版本:Rails 6.1.2.1、devise 4.7.3、devise-jwt 0.7.0、rspec-rails 4.0.2、rswag 2.4.0
- 接口规则:全链路REST接口使用JWT完成鉴权,所有请求默认交互内容类型为
application/json
异常表现
完全参照官方文档与教程完成Rswag接口配置,针对POST /users/sign_in接口定义符合规范的请求体schema,要求传入包含必填email、password字段的登录参数,预设接口成功响应状态码为201。
执行Rswag联动的RSpec测试用例时持续触发状态码不匹配报错,抛出Rswag::Specs::UnexpectedResponse异常,明确提示「预期响应码为201,实际返回401」,401响应体返回固定提示:You need to sign in or sign up before continuing.
已尝试的排查操作
先后构造两种符合Devise登录接口预期的入参格式开展测试,均返回相同的401鉴权拒绝结果,未达到预期的201成功响应:
- 通过FactoryBot工厂创建绑定固定邮箱、固定密码的有效用户,测试请求直接传入对应用户的登录凭证
- 将登录凭证嵌套至
user参数层级下,传入Devise默认要求的{ user: { email: 测试邮箱, password: 测试密码 } }结构参数
全程未发现其他路由匹配、权限拦截层面的额外报错
内容的提问来源于stack exchange,提问作者BlueConga
相关产品推荐
相关产品推荐

