回答:
ここで説明するように、get()メソッドの3番目の引数としてHTTPヘッダーを指定できるはずです。
http://api.rubyonrails.org/classes/ActionDispatch/Integration/RequestHelpers.html#method-i-get
そしてここ
http://api.rubyonrails.org/classes/ActionDispatch/Integration/Session.html#method-i-process
だから、あなたはこのようなことを試すことができます:
get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}
:authorization
。「Authorization」ヘッダーはにすることができます。
get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
`のようになります
私はこれをTest :: Unitで使用しました:
@request.env['HTTP_ACCEPT'] = "*/*, application/youtube-client"
get :index
ActionController::TestCase
Cookie
ヘッダーハッシュで指定されたキーを使用しようとしましたが(ブラウザーが送信するものだからです)、機能しませんでした。それから私はしrequest.keys
、という名前のキーを見ましたHTTP_COOKIE
。それを使ってうまくいった。彼らは本当にこれをよりよく文書化すべきです。
Rails 5.1.rc1でこれを実行しようとするのが非常に行き詰まったため、ここに追加します
getメソッドのシグネチャは少し異なります。
パスの後のオプションをキーワード引数として指定する必要があります。
get /some/path, headers: {'ACCEPT' => 'application/json'}
参考までに、キーワード引数の完全なセットは次のとおりです。
params: {}, headers: {}, env: {}, xhr: false, as: :symbol
これはリクエストスペックではなく、コントローラースペックで機能します。
request.headers["My Header"] = "something"
request.headers
たりrequest.env
ヘッダーを個別に設定する必要があります
request.headers["Accept"] = "application/json"
get / delete / ...を介して送信しようとすると、rails4の完全なガベージであり、ヘッダーではなくパラメーターとして送信されるため、頭が痛くなります。
{"Accept" => "application/json"}
でrspecを使用する Rack::Test::Methods
header 'X_YOUR_HEADER_VAR', 'val'
get '/path'
ヘッダー変数は次のようになります X-Your-Header-Var
Test::Unit
、RSpecではなくのためのものです。
ndefined method 'header'
エラーが発生します。
RSpec 3では、次の構文を使用できます
get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
公式のRspecドキュメントに記載されているとおり(リンクはv3.7を指します)
xhr: true
とヘッダーの両方を送信するには、たとえば次のようにする必要があります。
my_headers = { "HTTP_ACCEPT": "application/json" }
get my_path, xhr: true, headers: my_headers
headers =
ないmy_headers =
?
あなたの質問はすでに回答されていますが、別のアクションに何かをPOSTしたい場合は、これを行う必要があります:
post :save, {format: :json, application: {param1: "test", param2: "test"}}
次のようなものを試してください:
get :index, :format => 'json'
format=json
クエリパラメータとして追加されます。ヘッダーフィールドと同じではありません。
get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}