我目前正在构建一个由 Rails/rails-api 提供支持的 JSON API。我有一个接受通过 PATCH 请求发送的 JSON 的路由和一个需要访问原始请求/JSON的前置过滤器。
出于测试目的,我在过滤器之前添加了以下内容以显示我的问题:
before_filter do
puts "Raw Post: #{request.raw_post.inspect}"
puts "Params: #{params.inspect}"
end
以下 curl 请求按预期工作:
curl -X PATCH -H "Content-Type: application/json" -d '{"key":"value"}' http://localhost:3000/update
# Raw Post: "{\"key\":\"value\"}"
# Params: {"key"=>"value", "action"=>"update", "controller"=>"posts"}
但是我无法测试此方法,以下调用均不起作用:
包括参数,但不作为 JSON 传输
test 'passing hash' do patch :update, { key: "value" } end # Raw Post: "key=value" # Params: {"key"=>"value", "controller"=>"posts", "action"=>"update"}
包括参数,但又不是作为 JSON 传输的
test 'passing hash, setting the format' do patch :update, { key: "value" }, format: :json end # Raw Post: "key=value" # Params: {"key"=>"value", "controller"=>"posts", "action"=>"update", "format"=>"json"}
JSON 格式,但不包含在参数中
test 'passing JSON' do patch :update, { key: "value" }.to_json end # Raw Post: "{\"key\":\"value\"}" # Params: {"controller"=>"posts", "action"=>"update"}
JSON 格式,但不包含在参数中
test 'passing JSON, setting format' do patch :update, { key: "value" }.to_json, format: :json end # Raw Post: "{\"key\":\"value\"}" # Params: {"format"=>"json", "controller"=>"posts", "action"=>"update"}
这个列表更长,我只是想告诉你我的问题。我也测试了将 theAccept
和Content-Type
headers 都设置为application/json
,似乎没有任何帮助。我做错了什么,或者这是 Rails 功能测试中的错误?