【问题标题】:Rails controller test: Get with query params aren't encoded properlyRails 控制器测试:使用查询参数获取未正确编码
【发布时间】:2016-11-23 05:22:19
【问题描述】:

我的控制器测试中有以下行:

get brands_url, params: { test: 1, test2: 2}, as: :json

我要测试api请求brands?test=1&test1=2

在控制器索引方法中,params 对象最终看起来像:

<ActionController::Parameters {"{\"test\":1,\"test2\":2}"=>nil, "controller"=>"brands", "action"=>"index", "format"=>"json", "brand"=>{}} permitted: false>

params 哈希正在被转换为 json 并被解释为一个键。

如果我删除 as: :json 选项,我会得到我认为应该是预期的行为:

<ActionController::Parameters {"test"=>"1", "test2"=>"2", "controller"=>"brands", "action"=>"index"} permitted: false>

对为什么会发生这种情况有任何想法吗?

【问题讨论】:

    标签: testing controller ruby-on-rails-5


    【解决方案1】:
    brands?test=1?test1=2
    

    不是有效的网址。尝试将第二个 ? 更改为 &

    brands?test=1&test1=2
    

    【讨论】:

    • 我实际上并没有明确使用该 url/查询字符串,我只是将其作为使用 get 方法时生成的请求类型的示例(模拟请求)。我已经更正了错字。
    【解决方案2】:

    我不必在 params 哈希中传递参数,而是必须将参数传递给 url 帮助程序 brands_url。所以以下工作:

    get brands_url(test: 1, test2: 2), as: :json, xhr: true

    根据 rails 文档,原来的技术应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多