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

时间:2018-10-08 18:45:16

标签: ruby-on-rails rspec ruby-on-rails-5 rspec-rails apipie

我有以下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)时看到了这个问题。

有人看见过这样的东西吗?

2 个答案:

答案 0 :(得分:1)

在您尝试发送一些有效载荷时,GET请求不包含正文。对于GET请求,所有作为URL查询传递的参数(例如/index?model_id=1&workspace_id=1)和所有参数都是字符串。

您在这里有两个选择:

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

答案 1 :(得分:0)

是的。我遇到了同样的问题。我使用带有Rspec的Rack :: Test,并且Rack :: Test自动地(错误地)将每个值转换为字符串。不知道还有哪些后端位也可以这样做。

我发现进行机架测试以将字符串以外的任何值作为值发送的唯一方法是按如下所述覆盖请求方法:https://stackoverflow.com/a/37234290/2326613

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