在控制器规范中,我可以像下面这样设置 http 接受头:
request.accept = "application/json"
但是在请求规范中,“ request”对象是 nil。那么我该如何在这里做呢?
我之所以要将 http access header 设置为 json,是因为我可以这样做:
get '/my/path'
而不是这样
get '/my/path.json'
试试这样:
get :index, :format => '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
这适用于控制器规格,而不是请求规格:
request.headers["My Header"] = "something"
你的问题已经得到了回答,但是如果你想发布一些东西到另一个动作,你必须这样做:
post :save, {format: :json, application: {param1: "test", param2: "test"}}
我必须单独设置标题
request.headers["Accept"] = "application/json"
尝试通过 get/delete/... 发送。是完全垃圾在轨道4和造成我的头痛,因为它从来没有发送作为标题,但作为参数。
{"Accept" => "application/json"}
在 Rack::Test::Methods中使用 rspec
Rack::Test::Methods
header 'X_YOUR_HEADER_VAR', 'val' get '/path'
头变量将以 X-Your-Header-Var的形式显示
X-Your-Header-Var
为了同时发送 xhr: true和头文件,我必须这样做,例如:
xhr: true
my_headers = { "HTTP_ACCEPT": "application/json" } get my_path, xhr: true, headers: my_headers
我在这里添加了这个代码,因为我在 Rails 5.1. rc1中实现这个代码时遇到了很大困难
Get 方法签名现在略有不同。
您需要将路径后面的选项指定为关键字参数,即。
get /some/path, headers: {'ACCEPT' => 'application/json'}
仅供参考,完整的关键字参数是:
params: {}, headers: {}, env: {}, xhr: false, as: :symbol
使用 RSpec 3,您可以使用以下语法
get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
如 在正式的 Rspec 文档中所述(链接指向 v3.7)