Учитывая мои потребители API необходимо отправить HTTP-клиента заголовок так:Отправка пользовательских заголовков через RSpec
# curl -H 'X-SomeHeader: 123' http://127.0.0.1:3000/api/api_call.json
Тогда я могу прочитать этот заголовок в методе before_filter так:
# app/controllers/api_controller.rb
class ApiController < ApplicationController
before_filter :log_request
private
def log_request
logger.debug "Header: #{request.env['HTTP_X_SOMEHEADER']}"
...
end
end
Пока здорово. Теперь я хотел бы проверить это с помощью RSpec, как происходит изменение в поведении:
# spec/controllers/api_controller_spec.rb
describe ApiController do
it "should process the header" do
@request.env['HTTP_X_SOMEHEADER'] = '123'
get :api_call
...
end
end
Однако request
получил в ApiController не сможет найти переменный заголовок.
При попытке использовать same code
с заголовком HTTP_ACCEPT_LANGUAGE он будет работать. Где-то фильтруются пользовательские заголовки?
PS: Некоторые примеры использования в Интернете request
вместо @request
. Хотя я не уверен, какая из них правильна в отношении текущей комбинации Rails 3.2/RSpec 2.14 - оба метода не будут вызывать правильное поведение, но оба работают с HTTP_ACCEPT_LANGUAGE
.
Sorry - ваш ответ пришел так же, как я испытал это, как хорошо. См. Обновление. Спасибо. –
Проверьте мое обновление. –
Еще раз спасибо - я тоже пробовал это, и это не сработает для меня. Вы успешно протестировали это в спецификации RSpec Controller? –