我打算在我的项目中同时在请求和响应中使用JSON数据,并且在测试中遇到一些问题。如何在rails中发布JSON数据3功能测试
搜索一段时间后,我发现下面的代码使用curl
张贴JSON数据:
curl -H "Content-Type:application/json" -H "Accept:application/json" \
-d '{ "foo" : "bar" }' localhost:3000/api/new
在控制器我可以访问只需使用params[:foo]
这是很容易的JSON数据。但对于功能测试,我只能找到post
和xhr
(别名为xml_http_request
)。
如何在rails中编写功能测试以达到与使用curl
相同的效果?或者我应该以其他方式进行测试?
这是我试过的。我发现xhr
的实现在action_controller/test_case.rb
,并试图添加jhr
方法,只需更改'Conetent-Type'和'HTTP_ACCEPT'。 (添加于test/test_helpers.rb
)
def json_http_request(request_method, action, parameters = nil, session = nil, flash = nil)
@request.env['Content-Type'] = 'Application/json'
@request.env['HTTP_ACCEPT'] ||= [Mime::JSON, Mime::JS, Mime::HTML, Mime::XML, 'text/xml', Mime::ALL].join(', ')
__send__(request_method, action, parameters, session, flash).tap do
@request.env.delete 'Content-Type'
@request.env.delete 'HTTP_ACCEPT'
end
end
alias jhr :json_http_request
我用这个以同样的方式作为xhr
,但它不工作。我检查了@response
对象,看到身体是" "
。
我还找了堆栈溢出one similar question但它的轨道2与张贴原始数据,答案不轨工作3
像往常一样写功能测试,只需指定请求格式,如post:new,:foo =>'bar',:format =>'json' – taro 2011-04-30 13:16:33
我试过了。但是响应的内容类型是“text/html”,而body是'“”'。当使用''xhr''做post时,响应的content-type是“application/json”,body是JSON数据。 – cyfdecyf 2011-05-01 15:17:59