RSpec控制器规格,如何设置JSON体和URL参数?


body = { a: 1 }.to_json
params = { b: 2 }
post(:create, body: body, params: params, as: :json)

控制器中有params[:a]但没有params[:b]?

也许body正在担任总统,因为解析体在控制器中成为params,但在这种情况下,我如何也传递URL参数?

如果我删除as: :json,我会看到params中的URL参数,但不是解析的JSON体,因为MIME类型是text/html而不是text/json

body是从fixture中加载的,必须按原样发送,因为它的主体是签名的,所以它不能与params合并,即params: JSON.parse(body).merge(params)

我可以像这样解决这个问题:

request.query_string = "b=2"
post(:create, body: body, params: params, as: :json)

在这种情况下,我得到params的URL和body参数,所以似乎Rails控制器在给出JSON体和URL参数时做了正确的事情。

如果我们这样改变路由:

post '/foo?a=:a', to: 'foos#create'

我们最终在params中定义了URL参数和body参数。

相关内容

  • 没有找到相关文章

最新更新