加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 20:38:56 所属栏目:百科 来源:网络整理
导读:我计划在我的项目中的请求和响应中使用JSON数据,并在测试中出现问题. 搜索一段时间后,我发现使用curl发送JSON数据的以下代码: curl -H "Content-Type:application/json" -H "Accept:application/json" -d '{ "foo" : "bar" }' localhost:3000/api/new 在
我计划在我的项目中的请求和响应中使用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"}}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读