gpt4 book ai didi

ruby-on-rails - 如何编写需要 OAuth2 访问 token 的 RSpec 测试?

转载 作者:行者123 更新时间:2023-11-28 20:11:11 25 4
gpt4 key购买 nike

我正在为部分受 OAuth2 保护的 Rails API 编写 RSpec 测试。我需要编写测试,例如

  • 获取 ResourcesController#index
    • 当提供 access_token
      • 显示资源列表
    • 未提供access_token
      • 不返回任何内容

诸如此类。我以为我可以使用 oauth2 gem,但我很快意识到这可以通过向 Rails 应用程序发出实际的 HTTP 请求来实现。我有点迷路,有人能给我指出正确的方向吗?

编辑一些进一步的信息

我正在使用 Doorkeeper实现 OAuth2。我的问题与这样一个事实有关,即我的 Controller 的某些方法隐藏在如下内容的后面:

before_action :doorkeeper_authorize!, only: [:update, :destroy]

验证身份验证 token 的存在和有效性。现在,这些 token 必须存在于数据库中。那么我的问题是我该怎么做

  • 将这些 token 放入数据库(也就是如何在 RSpec 测试中模拟正确的登录),或者
  • 欺骗 Doorkeeper(通过 stub ?)认为这些 token 存在并且有效?

编辑 2

找到 this .在我阅读本文时,请随时添加答案。

最佳答案

您仍然可以使用 oauth2 gem,它在 its own test suite 中有许多 stub 访问 token 的示例.如果没有您可能遇到的特别指出的问题,则很难提供更多建议。

或者,有 vcr gem 记录 http 交互并在测试期间播放它们。您可以录制您的实时 API 交互,然后使用回放来运行您的测试。

更新

在您提到 Doorkeeper 并自己找到它的文档之后,这里有一个来自 same source 的示例.

describe Api::V1::ProfilesController do
describe 'GET #index' do
let(:token) { double :acceptable? => true }

before do
controller.stub(:doorkeeper_token) { token }
# allow(controller).to receive(:doorkeeper_token) {token} # => RSpec 3
end

it 'responds with 200' do
get :index, :format => :json
response.status.should eq(200)
end
end
end

Stubbing :acceptable? => true will bypass the doorkeeper filter, since the token is valid. If you prefer to return false then the response status will be 401 unauthorized.

关于ruby-on-rails - 如何编写需要 OAuth2 访问 token 的 RSpec 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38271659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com