我有一个Ruby(非轨道(应用程序,该应用程序使用葡萄来暴露API端点。端点之一需要一个值为值数组的参数,但也接受一个空数组:
requires :user_ids, type: Array, allow_blank: true
使用卷曲或邮递员手动测试端点时,这一切都很好,并且空数组被正确解释为参数user_ids: []
。但是,当RSPEC值为空数组时,RSPEC似乎省略了整个参数(当然,非空数阵列可以很好地工作(:
let(:params) { { user_ids: [] } }
let(:route) { post "api/users/remove", params }
在这种情况下,实际上通过的参数相等的 {}
和葡萄的requires
后卫启动,不允许端点执行任何操作。
不确定它是一个错误还是功能,以及如何强制RSPEC作为参数传递此空数组(以RSPEC 3.4和3.6的方式行事(。
使用params.to_json
并将标题'content_type'设置为'application/json'
为每个人都想知道:
- 这是由
Rack::Test
实现而非RSpec
引起的。 - Bartosz的答案有一个快捷方式:
post 'api/users/remove', params: params, as: :json