如何编写需要 OAuth2 访问令牌的 RSpec 测试?
How do I write RSpec tests that require an OAuth2 access token?
我正在为受 OAuth2 部分保护的 Rails API 编写 RSpec 测试。我需要编写测试,例如
GET ResourcesController#index
- 当提供
access_token
时
- 显示资源列表
- 未提供
access_token
时
- returns无内容
诸如此类。我以为我可以使用 oauth2 gem,但我很快意识到这可以通过向 Rails 应用程序发出实际的 HTTP 请求来实现。我有点迷路,有人能给我指明正确的方向吗?
编辑一些进一步的信息
我正在使用 Doorkeeper 来实施 OAuth2。我的问题与这样一个事实有关,即我的控制器的某些方法隐藏在如下内容的后面:
before_action :doorkeeper_authorize!, only: [:update, :destroy]
验证身份验证令牌的存在和有效性。现在,这些令牌必须存在于数据库中。那么我的问题是我该怎么做
- 将这些令牌放入数据库(也就是如何在 RSpec 测试中模拟正确的登录),或者
- 欺骗门卫(通过存根?)认为这些令牌存在并且有效?
编辑 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.
我正在为受 OAuth2 部分保护的 Rails API 编写 RSpec 测试。我需要编写测试,例如
GET ResourcesController#index
- 当提供
access_token
时- 显示资源列表
- 未提供
access_token
时- returns无内容
- 当提供
诸如此类。我以为我可以使用 oauth2 gem,但我很快意识到这可以通过向 Rails 应用程序发出实际的 HTTP 请求来实现。我有点迷路,有人能给我指明正确的方向吗?
编辑一些进一步的信息
我正在使用 Doorkeeper 来实施 OAuth2。我的问题与这样一个事实有关,即我的控制器的某些方法隐藏在如下内容的后面:
before_action :doorkeeper_authorize!, only: [:update, :destroy]
验证身份验证令牌的存在和有效性。现在,这些令牌必须存在于数据库中。那么我的问题是我该怎么做
- 将这些令牌放入数据库(也就是如何在 RSpec 测试中模拟正确的登录),或者
- 欺骗门卫(通过存根?)认为这些令牌存在并且有效?
编辑 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.