我正在嘗試爲需要身份驗證的一些RSpec請求設置標頭。標題是ACCESS_TOKEN
。無論我如何設置標題,它都不會被設置。我知道該應用程序的作品,因爲我可以手動測試它,我只是不能讓rspec測試工作。請參閱完整源代碼&此處測試此問題:https://github.com/lightswitch05/rspec-set-header-example在RSpec 3請求中設置標題
由於身份驗證用於大多數請求規範,因此我創建了支持幫助程序模塊來檢索訪問令牌並將其設置在標題中。下面是如何我想設置頁眉的總結,看到的一切,我已經試過在使用這個助手,並應工作full source
# my_app/spec/support/session_helper.rb
module SessionHelper
def retrieve_access_token
post api_v1_session_path({email: '[email protected]', password: 'poor_password'})
expect(response.response_code).to eq 201
expect(response.body).to match(/"access_token":".{20}"/)
parsed = JSON(response.body)
token = parsed['access_token']['access_token']
@request.headers['HTTP_ACCESS_TOKEN'] = token
end
end
一個例子要求規範,但總是失敗,因爲頭從來沒有被設置:
# my_app/spec/requests/posts_spec.rb
# ...
context "create" do
it "creates a post" do
retrieve_access_token
post = FactoryGirl.build(:post)
post api_v1_posts_path(
post: {
title: post.title,
content: post.content
}
)
expect(response.body).to include('"id":')
expect(response.body).to include('"title":"' + post.title + '"')
expect(response.body).to include('"content":"' + post.content + '"')
expect(response.response_code).to eq 201
end
end
我知道我可以手動設置頭中的個體get
和post
請求 - 但是,這並不是API級權限的維護的解決方案。想象一下,如果標題名稱稍有改變,則必須更改每個測試。
我對Solution#1進行了一些稍微更改:在rails_helper中,我將輔助函數包含爲控制器類型。我必須在我的助手中添加這個標記,就像這個request.headers ['HTTP_AUTH_TOKEN'] = Rails.application.secrets.default_api_token – 2015-07-23 14:10:44
對於任何想要使用RSpec 3和Rails 4添加標題的人,只需調用'request.headers .merge!({'X-MYHEADER':'value'})'在'get','post'等之前的任何位置添加標題到控制器規範的請求中。有關示例,請參閱此要點https://gist.github.com/quadrolls/9203f924f934398f6992162bbbcb1a0c – Squadrons 2016-04-07 20:36:26