如何编写需要 OAuth2 访问令牌的 RSpec 测试?

How do I write RSpec tests that require an OAuth2 access token?

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

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

编辑一些进一步的信息

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

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

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

编辑 2

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

您仍然可以使用 oauth2 gem, it has many examples of stubbing acces tokens in its own test suite。如果没有您可能遇到的具体问题,很难提供更多建议。

或者,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.