Apipie 接收整数参数作为字符串

Apipie receiving integer param as String

我有以下 RSpec 测试:

 it 'should not list alerts, since I do not have access to this model' do
   get :index, params: { model_id: @model2.id, workspace_id: @workspace.id }, as: :json
   expect(response).to have_http_status(:forbidden)
 end

它失败了,因为 Apipie 抱怨 workspace_id 是一个字符串,而实际上它不是,它是一个整数。我调试了调用,检查了 @workspace 并且 id 绝对是一个整数。

我在将应用程序迁移到 Rails 5.2.0(之前是 Rails 4)时看到了这个问题。

有人见过这样的东西吗?

GET 请求不包含正文,而您正在尝试发送一些负载。在 GET 请求的情况下,所有参数都作为 url 查询传递(例如 /index?model_id=1&workspace_id=1),并且所有参数都是字符串。

这里有两个选择:

  • GET更改为POST,它将允许请求正文。
  • 在操作中将字符串转换为整数。

是的。我遇到了同样的问题。我将 Rack::Test 与 rspec 一起使用,并且 Rack::Test 会自动(错误)将每个值转换为字符串。不确定还有哪些其他后端位也可以执行此操作。

我发现让机架测试将除字符串以外的任何内容作为值发送的唯一方法是覆盖此处所述的请求方法:

还有一个问题,BigDecimal 值被 "as: :json" 强制转换为字符串 - 不影响 OP(ID 是整数)但可能是其他人通过搜索找到这个问题。 错误的解决方法已被 Rails 团队弃用并删除。因此,为了能够遵循您的 JSON 消费者可能期望的 JSON 约定(与 Rails 约定相比),您需要覆盖 BigDecimal-as_json 方法来修复它: https://github.com/rails/rails/issues/25017