2016-07-08 49 views
1

我正在为使用OAuth2部分保护的Rails API编写RSpec测试。我需要编写的测试,如如何编写需要OAuth2访问令牌的RSpec测试?

  • GET ResourcesController#index
    • 时提供access_token
      • 显示资源
    • 列表时,未提供access_token
      • 没有返回内容

之类的东西。我以为我可以使用oauth2宝石,但我很快就意识到这是通过向Rails应用发出实际的HTTP请求来实现的。我有点失落,有人能指引我走向正确的方向吗?

编辑一些进一步的信息

我使用Doorkeeper实现了OAuth2。我的问题是与事实,我的控制器的一些方法背后都隐藏着像下面这样做:验证了存在和有效性,认证令牌的

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

。现在,这些令牌必须存在于数据库中。那么我的问题是我怎么,无论是

  • 把这些记号在数据库中(又名,我怎么模拟RSpec的测试中正确的登录),或
  • 招门卫(通过磕碰?)想这些令牌是否存在并且有效?

编辑2

实测值this。在阅读本文时,请随时添加答案。

回答

1

您仍然可以使用oauth2宝石,它在its own test suite中有很多残留存取令牌的例子。如果没有特别指出的问题,你可能会很难提供更多的建议。

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

UPDATE

你提到的看门人,并发现其自己的文档后,这里距离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 

成株:可以接受吗? => true将绕过门卫过滤器,因为令牌有效。如果您希望返回false,则响应状态将为401未经授权。

+0

感谢Nic。我曾看过这些例子,但是我无法弄清楚如何在测试中重用它们。我在我的问题中添加了一些细节,希望能够澄清我的立场。 – Morpheu5

+0

好吧,我得到我如何模拟令牌有效,但是如果我想确保我的控制器在令牌无效时没有行为不当,或者对于未被授权执行某些操作的用户有效行动? – Morpheu5

+0

通过使用'可以接受吗? => false'? –