【发布时间】:2014-10-29 22:04:09
【问题描述】:
我正在构建 Rails JSON API 并尝试编写测试以确保没有有效 auth_token 的请求会遇到 401 状态。
我在我的 spec_helper.rb (config.include Devise::TestHelpers, type: :controller) 和我的控制器规范中都包含了 Devise 测试助手(如下所示)。我还在每次测试之前设置@request.env['devise.mapping'] = Devise.mappings[:user]。我对用户 进行正确身份验证的所有测试都运行良好,但任何未经授权的请求都会导致:
ArgumentError:
uncaught throw :warden
由于 Devise 已经删除了他们的 :token_authenticable 实现,我已经调整了here 描述的更安全的解决方案。
值得注意的是,我使用的是rails-api gem,所以我的 ApplicationController 继承自 ActionController::API 而不是 Base。
我已经在 Internet 上搜索了很多关于此错误的 Stack Overflow 问题,并尝试了我能想到的所有方法,但没有运气。据我所知,仅 Devise 测试助手就足够了,因为它们应该捕获 :warden throws 并给出适当的 401。
非常感谢大家提供的任何建议,如有必要,我可以用更多细节修改这个问题。谢谢!
【问题讨论】:
-
哪几行代码准确地抛出了
ArgumentError?
标签: ruby-on-rails rspec devise warden