rails-api gemを使用してWebサービスを構築しており、RSpecを使用してAPIをテストしたいと考えています。HTTPメソッドに関係なく、私が行うすべてのリクエストには、CONTENT_TYPE
「application/x-www-form-urlencoded」として設定されたヘッダーがあります。これは、コントローラーでwrap_parametersを使用しようとするまでは実際には問題ではなく、paramsハッシュには影響しません。
class ApplicationController < ActionController::API
include ActionController::ParamsWrapper
end
class ProjectsController < ApplicationController
wrap_parameters :project, include: [:name]
# ...
end
このハックは機能しなくなり(@requestはnil)、私が見つけた他のStackOverflowの投稿も機能しません。
RSpecテストで次のリクエストを行った場合:
put "/projects/1.json", {name: 'Updated Project 1'}
デバッガーをコントローラーに配置すると、次のようになります。
(rdb:1) p params
{ "name"=>"Updated Project 1",
"action"=>"update",
"controller"=>"projects",
"id"=>"5539bbd9-010c-4cfb-88d3-82dadbc99507",
"format"=>"json"
}
(rdb:1) p request.content_type
"application/x-www-form-urlencoded"
paramsハッシュに次のようなものが表示されることを期待しています(プロジェクトキーの追加に注意してください)。
{ "name"=>"Updated Project 1",
"action"=>"update",
"controller"=>"projects",
"id"=>"5539bbd9-010c-4cfb-88d3-82dadbc99507",
"format"=>"json",
"project" => {"name" => "Updated Project 1"}
}
RSpecだけでコンテンツタイプヘッダーを設定することはできますか?または、この機能のためにラック/テストを使用する必要がありますか?