【发布时间】: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 是的,在测试中明确设置所有内容都可以解决问题。请给出答案,我会将其标记为最佳答案;)