Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在RSpec Rails控制器测试中指定内容类型(和其他头)和请求主体?_Ruby On Rails_Json_Rspec - Fatal编程技术网

Ruby on rails 如何在RSpec Rails控制器测试中指定内容类型(和其他头)和请求主体?

Ruby on rails 如何在RSpec Rails控制器测试中指定内容类型(和其他头)和请求主体?,ruby-on-rails,json,rspec,Ruby On Rails,Json,Rspec,我正在尝试测试一个rails操作,它在POST主体中使用原始json。如果我使用Content-Type:application/json头集curl,rails将正确解析参数 如何在rspec控制器测试中直接设置请求正文和标题?在rspec 1.3中,可以对“请求”变量进行操作。像这样的东西应该适合你: request.env['CONTENT_TYPE'] = 'application/json' post :method_name 我用 post:method_name,{:format

我正在尝试测试一个rails操作,它在POST主体中使用原始json。如果我使用Content-Type:application/json头集curl,rails将正确解析参数


如何在rspec控制器测试中直接设置请求正文和标题?

在rspec 1.3中,可以对“请求”变量进行操作。像这样的东西应该适合你:

request.env['CONTENT_TYPE'] = 'application/json'
post :method_name
我用
post:method_name,{:format=>:json,…other parameter data}

结合request.env['RAW_post_data']中的参数设置,这种方法工作得非常好。谢谢。2年后(2012-11-02),这已经不起作用了。是否有人有更新的方法强制请求为
json
?我正在设置:format=>:json,但这并不完全是我的客户端正在做的事情,我还试图使用fdoc生成API文档,其中在每个API中都包含这个额外的参数(我们要求客户端将Accept头设置为
application/json
)。有关解决此问题的方法,请参阅。这将设置“Accept”头,而不是“Content Type”。