20

私の 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 で受信した はヘッダー変数を見つけることができません。

HTTP_ACCEPT_LANGUAGE ヘッダーで を試すsame codeと、うまくいきます。カスタム ヘッダーはどこかでフィルタリングされていますか?

PS: Web に関するいくつかの例では、request代わりに@request. 現在の Rails 3.2/RSpec 2.14 の組み合わせの時点でどちらが正しいかはわかりませんが、どちらの方法も正しい動作をトリガーしませんが、どちらHTTP_ACCEPT_LANGUAGEも同様に機能します。

4

3 に答える 3

25

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

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 を呼び出すだけです。

于 2014-05-13T15:15:55.930 に答える
12

getで直接定義できます。

get :api_call, nil, {'HTTP_FOO'=>'BAR'}

コンソールで動作することを確認しました。

于 2013-08-26T07:01:14.400 に答える