Ser*_*gey 121 testing json rspec ruby-on-rails
在控制器规范中,我可以像这样设置http接受标头:
request.accept = "application/json"
Run Code Online (Sandbox Code Playgroud)
但在请求规范中,"请求"对象为零.那我怎么能在这里做呢?
我想将http接受标头设置为json的原因是我可以这样做:
get '/my/path'
Run Code Online (Sandbox Code Playgroud)
而不是这个
get '/my/path.json'
Run Code Online (Sandbox Code Playgroud)
awa*_*age 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"}
Run Code Online (Sandbox Code Playgroud)
Syt*_*dij 38
我在Test :: Unit中使用了它:
@request.env['HTTP_ACCEPT'] = "*/*, application/youtube-client"
get :index
Run Code Online (Sandbox Code Playgroud)
mor*_*oth 18
对我来说这很简单 __CODE__
Jul*_*and 15
我在这里添加了这个,因为我在Rails 5.1.rc1中试图做到这一点
get方法签名现在略有不同.
您需要在路径后指定选项作为关键字参数,即
get /some/path, headers: {'ACCEPT' => 'application/json'}
仅供参考,完整的关键字参数集是:
params: {}, headers: {}, env: {}, xhr: false, as: :symbol
小智 9
我必须单独设置标头
request.headers["Accept"] = "application/json"
Run Code Online (Sandbox Code Playgroud)
尝试通过get/delete/....发送它是完全垃圾在rails4并导致我的头痛,因为它永远不会作为标题发送,而是作为参数发送.
{"Accept" => "application/json"}
Run Code Online (Sandbox Code Playgroud)
使用rspec Rack::Test::Methods
header 'X_YOUR_HEADER_VAR', 'val'
get '/path'
Run Code Online (Sandbox Code Playgroud)
标头var将通过as X-Your-Header-Var
要发送xhr: true
和标头,我必须做例如:
my_headers = { "HTTP_ACCEPT": "application/json" }
get my_path, xhr: true, headers: my_headers
Run Code Online (Sandbox Code Playgroud)
使用RSpec 3,您可以使用以下语法
get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
Run Code Online (Sandbox Code Playgroud)
如官方Rspec文档中所述(链接指向v3.7)
尝试类似的方法:
get :index, :format => 'json'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
73099 次 |
最近记录: |