我正在使用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
这个 hack不再有效(@request 为零),我发现的其他 Stack Overflow 帖子也没有工作。
如果我在我的 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 设置内容类型标头?还是我必须为此功能使用机架/测试?