当数组内的数据动态变化时如何在空手道中匹配数组内的数组

How to match array inside array in karate when data inside array is dynamically changes

这是我用来验证的代码行:

And match response.modelGroups contains only ExpectedResonse.modelGroups

实际 response.modelGroups:

[
    {
        "defaultEscalationRate": 5,
        "description": "sample description",
        "displayOrder": 1,
        "id": 1,
        "name": "Revenue",
        "templateModels": [
            {
                "description": "TBA",
                "displayOrder": 1,
                "id": 1,
                "name": "Residential Revenue",
                "useTenureType": "TBA"
            },
            {
                "description": "TBA",
                "displayOrder": 2,
                "id": 2,
                "name": "Other Revenue",
                "useTenureType": "TBA"
            }
        ]
    },
    {
        "defaultEscalationRate": 5,
        "description": "sample description",
        "displayOrder": 2,
        "id": 2,
        "name": "Cost",
        "templateModels": [
            {
                "description": "TBA",
                "displayOrder": 3,
                "id": 3,
                "name": "Operating Cost",
                "useTenureType": "TBA"
            },
            {
                "description": "TBA",
                "displayOrder": 4,
                "id": 4,
                "name": "Development Cost",
                "useTenureType": "TBA"
            },
            {
                "description": "TBA",
                "displayOrder": 5,
                "id": 5,
                "name": "Land & Infrastructure Cost",
                "useTenureType": "TBA"
            }
        ]
    }
]

预计 response.modelGroups:

[
    {
        "defaultEscalationRate": 5,
        "description": "sample description",
        "displayOrder": 1,
        "id": 1,
        "name": "Revenue",
        "templateModels": [
            {
                "description": "TBA",
                "displayOrder": 2,
                "id": 2,
                "name": "Other Revenue",
                "useTenureType": "TBA"
            },
            {
                "description": "TBA",
                "displayOrder": 1,
                "id": 1,
                "name": "Residential Revenue",
                "useTenureType": "TBA"
            }
        ]
    },
    {
        "defaultEscalationRate": 5,
        "description": "sample description",
        "displayOrder": 2,
        "id": 2,
        "name": "Cost",
        "templateModels": [
            {
                "description": "TBA",
                "displayOrder": 3,
                "id": 3,
                "name": "Operating Cost",
                "useTenureType": "TBA"
            },
            {
                "description": "TBA",
                "displayOrder": 4,
                "id": 4,
                "name": "Development Cost",
                "useTenureType": "TBA"
            },
            {
                "description": "TBA",
                "displayOrder": 5,
                "id": 5,
                "name": "Land & Infrastructure Cost",
                "useTenureType": "TBA"
            }
        ]
    }
]

验证后异常: 匹配失败:CONTAINS_ONLY

$[0].templateModels[0].name | not equal (STRING:STRING)
              'Residential Revenue'
              'Other Revenue'

当 json 包含数组的数组并且这些数组的数据和大小正在动态更改时,我不明白如何验证它。

使用contains deep:

* def expected =
"""
[
  {
    "id": 1,
    "data": [
      {
        "name": "a"
      },
      {
        "name": "b"
      }
    ]
  },
  {
    "id": 2,
    "data": [
      {
        "name": "c"
      },
      {
        "name": "d"
      },
      {
        "name": "e"
      }
    ]
  }
]
"""
* def response =
"""
[
  {
    "id": 2,
    "data": [
      {
        "name": "e"
      },
      {
        "name": "d"
      },
      {
        "name": "c"
      }
    ]
  },
  {
    "id": 1,
    "data": [
      {
        "name": "b"
      },
      {
        "name": "a"
      }
    ]
  }
]
"""
* match response contains deep expected

是的,没有 contains only deep,但欢迎您将该代码贡献给空手道 :)

但说真的,那种极端的检查是不需要的。如果您确实需要验证 contains only,请部分验证:

* def ids = $expected[*].id
* match response[*].id contains only ids