架构验证数组问题

问题描述 投票:0回答:1

我无法验证包含数组的模式,特别是当每个请求的对象数量不同时。

响应示例:

{
  "name": "value",
  "id": "value",
  "arrayField": [],
  "objects": [
    {
      "Field1": "value",
      "Field2": false,
    },
    {
      "Field1": "value",
      "Field2": true,
    }
  ]
}

请记住,另一个请求可能在对象数组中包含更多对象。另外,我确实需要检查 Field1 和 Field2 是否存在。

在功能文件中,我使用的是经典的:

 def expectedSchema = read('path to json')
    match response == expectedSchema

问题是,我在架构中尝试了多种解决方案,但总是收到错误: $ |不等于|实际不包含键 - '#array' (MAP:MAP) 或类似的东西。

如果对象数量不同,架构版本 1 将失败:

{
  "name": "#string",
  "id": "#string",
  "arrayField": "#array",
  "objects": [
    {
      "Field1": "#string",
      "Field2": "#boolean"
    },
    {
      "Field1": "#string",
      "Field2": "#boolean"
    }
  ]
}

架构版本 2 将因上述错误而失败:

{
  "name": "#string",
  "id": "#string",
  "arrayField": "#array",
  "objects": "#array"
  "#array": [
    "Field1": "#string",
    "Field2": "#boolean"
  ]
}

有没有办法成功验证模式?

java karate
1个回答
0
投票

已在此解释:https://stackoverflow.com/a/61252709/143475

就我个人而言,我只会做一个

match each
。我的建议是团队不应该沉迷于尝试将验证压缩到一个模式中 - 当然不是“单一”模式。

* match each response.objects == { Field1: '#string', Field2: '#boolean' }
© www.soinside.com 2019 - 2024. All rights reserved.