在控制器规范中,我可以像这样设置http接受标头:
request.accept = "application/json"
但在请求规范中,“request”对象为nil。那我怎么能在这里做呢?
我想将http接受标头设置为json的原因是我可以这样做:
get '/my/path'
而不是
get '/my/path.json'
答案 0 :(得分:129)
您应该能够将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"}
答案 1 :(得分:36)
我在Test :: Unit中使用了它:
@request.env['HTTP_ACCEPT'] = "*/*, application/youtube-client"
get :index
答案 2 :(得分:18)
对我而言,它工作简单request.headers["My Header"] = "something"
答案 3 :(得分:13)
我在这里添加了这个,因为我在Rails 5.1.rc1
中主要试图做到这一点。get方法签名现在略有不同。
您需要在路径后指定选项作为关键字参数,即
get /some/path, headers: {'ACCEPT' => 'application/json'}
仅供参考,完整的关键字参数集是:
params: {}, headers: {}, env: {}, xhr: false, as: :symbol
答案 4 :(得分:8)
将rspec与Rack::Test::Methods
header 'X_YOUR_HEADER_VAR', 'val'
get '/path'
标头变量将以X-Your-Header-Var
答案 5 :(得分:7)
我必须单独设置标题
request.headers["Accept"] = "application/json"
尝试通过get / delete / ....发送它是完全垃圾在rails4中,并导致我的头痛,因为它永远不会作为标题发送,而是作为参数发送。
{"Accept" => "application/json"}
答案 6 :(得分:4)
要发送xhr: true
和标题,我必须这样做:
my_headers = { "HTTP_ACCEPT": "application/json" }
get my_path, xhr: true, headers: my_headers
答案 7 :(得分:4)
对于RSpec 3,您可以使用以下语法
get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
如in the official Rspec documentation所述(链接指向v3.7)
答案 8 :(得分:3)
尝试类似:
get :index, :format => 'json'
答案 9 :(得分:2)
您的问题已经得到解答,但如果您想将某些内容发布到其他操作,则必须执行此操作:
post :save, {format: :json, application: {param1: "test", param2: "test"}}