如何在rspec请求规范中设置请求标头?

在控制器规范中,我可以像这样设置http accept header:

request.accept = "application/json" 

但在请求规范中,“请求”对象是零。 那我该怎么做呢?

我想设置HTTP接受头到JSON的原因是我可以这样做:

 get '/my/path' 

而不是这个

 get '/my/path.json' 

您应该能够指定HTTP标头作为get()方法的第三个参数,如下所述:

http://api.rubyonrails.org/classes/ActionDispatch/Integration/RequestHelpers.html#method-i-get

所以,你可以尝试这样的事情:

 get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"} 

我在Test :: Unit中使用了这个:

 @request.env['HTTP_ACCEPT'] = "*/*, application/youtube-client" get :index 

对我来说,这是简单的request.headers["My Header"] = "something"

Rack::Test::Methods使用rspec

 header 'X_YOUR_HEADER_VAR', 'val' get '/path' 

头var将通过X-Your-Header-Var

尝试像这样:

 get :index, :format => 'json' 

我必须分开设置标题

 request.headers["Accept"] = "application/json" 

尝试通过get / delete / ….发送它是在rails4中完成垃圾,并在我的头部造成痛苦,因为它永远不会发送为标题,但作为参数。

 {"Accept" => "application/json"} 

要发送xhr: true和头文件,我必须做如下:

 headers = { "HTTP_ACCEPT": "application/json" } get my_path, xhr: true, headers: my_headers 

你的问题已经被回答了,但是如果你想把某些事情发布到另一个行动,你必须这样做:

 post :save, {format: :json, application: {param1: "test", param2: "test"}} 

我在这里添加了这个,因为我在Rails 5.1.rc1中试图做到这一点

get方法签名现在略有不同。

您需要指定path后面的选项作为关键字参数,即

get /some/path, headers: {'ACCEPT' => 'application/json'}

仅供参考,全套关键字参数是:

params: {}, headers: {}, env: {}, xhr: false, as: :symbol