私の 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
ただし、request
ApiController で受信したものはヘッダー変数を見つけることができません。
same code
HTTP_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 を呼び出すだけです。