在控制器规范中,我可以这样设置HTTP Accept头:
request.accept = "application/json"
但在请求规范中,“request”对象为空。那么我该怎么做呢?
我想设置http接受头为json的原因是这样我就可以做到这一点:
get '/my/path'
用这个代替
get '/my/path.json'
在控制器规范中,我可以这样设置HTTP Accept头:
request.accept = "application/json"
但在请求规范中,“request”对象为空。那么我该怎么做呢?
我想设置http接受头为json的原因是这样我就可以做到这一点:
get '/my/path'
用这个代替
get '/my/path.json'
你可以按照这里所描述的方式,将HTTP标头作为get()方法的第三个参数指定:
http://api.rubyonrails.org/classes/ActionDispatch/Integration/RequestHelpers.html#method-i-get
以及这里:
http://api.rubyonrails.org/classes/ActionDispatch/Integration/Session.html#method-i-process
因此,你可以尝试像这样做:
get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}
我在Test::Unit中使用了这个:
@request.env['HTTP_ACCEPT'] = "*/*, application/youtube-client"
get :index
Cookie
的键(因为这是我的浏览器发送的),但它没有起作用。然后我执行了request.keys
并看到了一个名为HTTP_COOKIE
的键。使用它可以正常工作。他们真的应该更好地记录这个。 - Kelvin我将在此处添加内容,因为我在尝试在Rails 5.1.rc1中完成此操作时遇到了重大困难。
现在get方法的签名略有不同。
您需要在路径后面指定选项作为关键字参数,例如:
get /some/path, headers: {'ACCEPT' => 'application/json'}
请注意,完整的关键字参数集如下:
params: {},headers: {},env: {},xhr: false,as: :symbol
这适用于控制器规范,而不是请求规范:
request.headers["My Header"] = "something"
request.headers
或 request.env
。 - Edgar Ortegaget my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
正如官方 Rspec 文档(链接指向 v3.7)所描述的那样
使用 Rack::Test::Methods
与 rspec
header 'X_YOUR_HEADER_VAR', 'val'
get '/path'
标题变量将作为X-Your-Header-Var
传递。
Test::Unit
的,不是针对 RSpec。 - Franklin Yurequest.headers["Accept"] = "application/json"
{"Accept" => "application/json"}
xhr: true
和 headers,我需要这样做,例如:my_headers = { "HTTP_ACCEPT": "application/json" }
get my_path, xhr: true, headers: my_headers
headers =
应该改为 my_headers =
吗? - webaholikget :index, :format => 'json'
您的问题已经得到回答,但是如果您想将某些内容POST到另一个操作中,则需要执行以下操作:
post :save, {format: :json, application: {param1: "test", param2: "test"}}
`get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}`
(说明:这是一个代码示例,意思是在发送HTTP请求时需要设置'HTTP_ACCEPT'头部信息为"application/json"。) - Matt Scilipotiget(:action, format: :json)
应该可以解决问题。 - yuvalget my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
。 - Cyril Duchon-Doris