如何在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