将标头附加到Rspec控制器测试
我正在尝试为我的控制器编写测试,以接收来自外部服务的请求。 到目前为止,这是我的测试:
describe ApplyController do context 'when valid' do let(:parameters) do file = File.join File.dirname(__FILE__), '..', 'samples', 'Indeed.json' JSON.parse(File.read file) end let(:signature) { 'GC02UVj0d4bqa5peNFHdPQAZ2BI=' } subject(:response) { post :indeed, parameters, 'X-Indeed-Signature' => signature } it 'returns 200 ok if Request is valid' do expect(response.status).to eq 200 end end end
这应该根据我能找到的文档工作。
我的控制器现在看起来像这样:
class ApplyController < Application Controller def indeed binding.pry end end
当我在测试中进入Pry并尝试检查request.headers['X-Indeed-Signature']
的值时,我总是得到nil
有什么东西我不见了吗? 我正在使用Rails 3.2和Rspec 3
我想你想要(直接来自你的一个链接)
it "returns 200 ok" @request.headers['X-Indeed-Signature'] = signature post :indeed, parameters response.status.should == 200 end
你不需要主题(:回复)
我能够通过使用@request.env
而不是@request.headers
来修复它,如下所示:
describe ApplyController do context 'when valid' do let(:parameters) do file = File.join File.dirname(__FILE__), '..', 'samples', 'Indeed.json' JSON.parse(File.read file) end let(:signature) { 'GC02UVj0d4bqa5peNFHdPQAZ2BI=' } it 'returns 200 ok if Request is valid' do @request.env['X-Indeed-Signature'] = signature post :indeed, parameters expect(response.status).to eq 200 end end end
好吧,这对于rspec来说非常愚蠢。
请求规范中的自定义标头
headers = { 'AUTH' : 'super secret key' } post '/api/some_action', { user_id: 1337 }.to_json, headers
在你的控制器中:
def some_action token = request.headers['AUTH'] end
Controller规范中的自定义标头
headers = { 'AUTH' : 'super secret key' } post '/api/some_action', { user_id: 1337 }, headers
在你的控制器中:
def some_action token = request.headers['rack.session']['AUTH'] end
只是分享两者之间的差异。 我不相信我在rspec或rails中有任何特殊配置,以使两种不同规范类型的标题以不同方式放置。