RSpec:设置请求标头

Dre*_*ker 2 ruby rspec ruby-on-rails rspec-rails

我想ActionDispatch request在我的规范中用helper方法设置重要的标题:

RSpec.describe API::V1::FoosController, type: :request do
  describe 'GET #index' do
    context 'common case' do
      request.env.merge!({'HTTP_FOO': 'FOO'})
      get api_foos_path, {}, {Accept: Mime::JSON}
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但是request当涉及到控制器时,这个标题(通常是任何标题集)都会消失:

class API::V1::FoosController < ApplicationController
  respond_to :json, :xml

  def index
    request.env.has_key? 'HTTP_FOO' # false
    respond_with serialize_models(Foo.all)
  end
  # ...
end
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?如何正确设置?设置标题request.header@request.header使用相同的标题.

PS:我知道我可以将标题设置为Rack::Test::Methods助手的第三个参数,但我不想违反DRY - 我只想在那里定义Mime格式.

zei*_*not 6

请尝试这样:

request.env['HTTP_FOO_HEADER'] = 'foo header'
Run Code Online (Sandbox Code Playgroud)