2016-07-08 82 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'? –