在控制器规范中,我可以像这样设置 http 接受标头:
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
和这里
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
ActionController::TestCase
的旧 2.3 应用程序上
Cookie
的键(因为这是我的浏览器发送的),但它不起作用。然后我做了 request.keys
并看到了一个名为 HTTP_COOKIE
的键。使用它有效。他们真的应该更好地记录这一点。
我在这里添加了这个,因为我在 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
将 rspec 与 Rack::Test::Methods
一起使用
header 'X_YOUR_HEADER_VAR', 'val'
get '/path'
标头 var 将以 X-Your-Header-Var
的形式出现
Test::Unit
,而不是针对 RSpec。
ndefined method 'header'
错误。
我必须单独设置标题
request.headers["Accept"] = "application/json"
尝试通过 get/delete/.... 发送它在 rails4 中完全是垃圾,并导致我头疼,因为它从不作为标题发送,而是作为参数发送。
{"Accept" => "application/json"}
使用 RSpec 3,您可以使用以下语法
get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
如 in the official Rspec documentation 所述(链接指向 v3.7)
要同时发送 xhr: true
和标头,我必须这样做:
my_headers = { "HTTP_ACCEPT": "application/json" }
get my_path, xhr: true, headers: my_headers
您的问题已经得到解答,但如果您想将某些内容发布到另一个操作,您必须这样做:
post :save, {format: :json, application: {param1: "test", param2: "test"}}
尝试类似:
get :index, :format => 'json'
format=json
添加为查询参数。与标题字段不同。
get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}
:authorization
。get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
`