RSpec 経由でカスタムヘッダーを送信する 質問する

RSpec 経由でカスタムヘッダーを送信する 質問する

私の API コンシューマーは次のような顧客 HTTP ヘッダーを送信する必要があります。

# 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

ただし、requestApiController で受信したものはヘッダー変数を見つけることができません。

same codeHTTP_ACCEPT_LANGUAGE ヘッダーを使用して試すと、動作します。カスタム ヘッダーはどこかでフィルターされていますか?

PS: Web 上のいくつかの例requestでは、 の代わりにを使用しています@request。現在の Rails 3.2/RSpec 2.14 の組み合わせではどちらが正しいのかわかりませんが、どちらの方法でも正しい動作は発生しませんが、どちらも で動作しますHTTP_ACCEPT_LANGUAGE

ベストアンサー1

まあ、人々にとっては遅すぎるかもしれないが、ただ並んでいるだけだ。

it 'should get profile when authorized' do
  user = FactoryGirl.create :user
  request.headers[EMAIL_TOKEN] = user.email
  request.headers[AUTH_TOKEN] = user.authentication_token
  get :profile
  response.should be success
end

適切な設定で request.headers を呼び出すだけです。

おすすめ記事