ruby-on-rails – 如何在rails 3中发布JSON数据功能测试

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何在rails 3中发布JSON数据功能测试前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我计划在我的项目中的请求和响应中使用JSON数据,并在测试中出现问题.

搜索一段时间后,我发现使用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相同的效果?还是应该用其他方式进行测试?

这是我试过的我在action_controller / test_case.rb中找到xhr的实现,并尝试添加jhr方法,只需更改“Conetent-Type”和“HTTP_ACCEPT”. (在test / helper.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,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,但它是rails 2,并且发送原始数据的答案在rails 3中不起作用.

解决方法

我发现这正是我想要的 – 将JSON发布到控制器的动作.
post :create,{:format => 'json',:user => { :email => "test@test.com",:password => "foobar"}}

猜你在找的Ruby相关文章