我正在为一个部分受OAuth2保护的Rails API编写RSpec测试。我需要编写诸如
之类的测试GET ResourcesController#index
access_token
时
access_token
时
和那样的东西。我以为我可以使用oauth2 gem,但我很快就意识到这可以通过向Rails应用程序发出实际的HTTP请求来实现。我有点失落,有人能指出我正确的方向吗?
编辑更多信息
我正在使用Doorkeeper来实施OAuth2。我的问题与我的控制器的某些方法隐藏在以下内容之后的事实有关:
before_action :doorkeeper_authorize!, only: [:update, :destroy]
验证身份验证令牌的存在和有效性。现在,这些令牌必须存在于数据库中。我的问题是我如何,
编辑2
找到this。在我读完这篇文章时,请随意添加答案。
答案 0 :(得分:1)
你仍然可以使用oauth2 gem,它有许多在its own test suite中存根访问令牌的例子。如果没有一个特别尖锐的问题,你可能会提出更多的建议。
或者,有vcr gem记录http交互并在测试期间播放它们。您可以录制实时API交互,然后使用播放来运行测试。
<强>更新强>
在您提到门卫并自己找到其文档之后,这是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:可以接受吗? =&GT; true将绕过门卫过滤器,因为令牌有效。如果您希望返回false,则响应状态将为401未授权。