RSpecでredirectするとヘッダーの設定が無視される

Rails4 + RSpec3 のrequests specでredirect後の処理を検証したい時、以下コードのようにheaders部分にIPアドレスを指定しても無視されてしまう。(ちなみにCapybaraだとセッションの検査ができなかったのでできればrspecで検査したいという状況だった)

before do
  params = {}
  headers = { 'REMOTE_ADDR' => '192.168.0.1' }
  get_via_redirect photos_url, params, headers
end

解決方法の結論

実際にIPアドレスを取得するのに使っているメソッド、例えばActionDispatch::Request#remote_ip にmockを設定すればよい。

before do
  params = {}

  allow_any_instance_of(ActionDispatch::Request).to receive(:remote_ip).and_return('192.168.0.1')

  get_via_redirect photos_url, params, headers
end

調べた

どう考えてもリダイレクト先でヘッダーの指定が無視されているので、コードを追ってみた

続きを読む RSpecでredirectするとヘッダーの設定が無視される