Добавление заголовков в тесты контроллера 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
Ответы
Ответ 1
Мне удалось исправить его, используя @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
Ответ 2
Я думаю, что вы хотите (прямо из одной из ваших ссылок)
it "returns 200 ok"
@request.headers['X-Indeed-Signature'] = signature
post :indeed, parameters
response.status.should == 200
end
Вам не нужна тема (: ответ)
Ответ 3
Хорошо, это довольно глупо из rspec.
Пользовательские заголовки в спецификации запроса
headers = {
'AUTH' => 'super secret key'
}
post '/api/some_action', { user_id: 1337 }.to_json, headers
И в вашем контроллере:
def some_action
token = request.headers['AUTH']
end
Пользовательские заголовки в спецификации контроллера
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, чтобы заголовки двух разных типов спецификаций располагались по-разному.