【问题标题】:Rspec interprets empty array as lack of parameter with GrapeRspec 将空数组解释为 Grape 缺少参数
【发布时间】:2017-06-01 09:41:43
【问题描述】:

我有一个使用 Grape 公开 API 端点的 Ruby(非 Rails)应用程序。其中一个端点需要一个参数,该参数是一个值数组,但也接受一个空数组:

requires :user_ids, type: Array, allow_blank: true

当使用 Curl 或 Postman 手动测试端点时,这一切正常 - 并且空数组被正确解释为参数 user_ids: []。但是,当 rspec 的值为空数组时(非空数组当然可以完美运行),rspec 似乎省略了整个参数:

let(:params) { { user_ids: [] } }
let(:route) { post "api/users/remove", params }

在这种情况下,实际传递的参数等于 {} 和 Grape 的 requires 保护启动,不允许端点执行任何操作。

不确定这是错误还是功能,以及如何强制 rspec 将此空数组作为参数传递(在 rspec 3.4 和 3.6 中都这样)。

【问题讨论】:

  • 尝试使用params.to_json并将标题'CONTENT_TYPE'设置为'application/json'
  • @BartoszBonisławski 是的,在测试中明确设置所有内容都可以解决问题。请给出答案,我会将其标记为最佳答案;)

标签: arrays ruby rspec grape


【解决方案1】:

使用params.to_json 并将标题“CONTENT_TYPE”设置为“application/json”

【讨论】:

  • 嗨,这对我有用。对于不同的问题。我在 api 端点中有一个未记录的数组。发送一个空数组而不在参数上调用to_json 会使另一侧的数组:[""] 这很奇怪。为什么添加这两个东西可以使这项工作?
【解决方案2】:

对于所有想知道的人:

  1. 这是由Rack::Test implementation 而不是RSpec 引起的。
  2. Bartosz 的回答有一个捷径:
post 'api/users/remove', params: params, as: :json

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    相关资源
    最近更新 更多