首页 > 解决方案 > “匹配每个”数组中的一个元素

问题描述

我关于“​​匹配每个”的选择性断言的问题。下面是一个示例 json 正文:

* def data = 


"""
{
 "companies": [
    {
     "companyDetails": {
        "name": "companyName",
        "location": {
            "address": "companyAddress",
            "street": "companyStreet"
         }
       }
    },
    {
     "companyDetails": {
        "name": "companyName",
        "location": {
            "address": "companyAddress",
            "street": "companyStreet"
         }
       }
    }
  ]
}
"""

我们如何断言响应中的每个“companyDetails”对象是否包含某个元素,例如仅名称?

* match each data.companies contains { companyDetails: { name: '#notnull' } }

当我使用上述步骤时,这将返回以下错误:

$[0] | actual does not contain expected | all key-values did not match, expected has un-matched keys

那么,有没有什么方法可以在这个对象中只声明一个字段呢?例如,断言每个 companyDetails 对象是否包含 name,但忽略 location 等其他元素?谢谢

标签: karate

解决方案


这将起作用:

* match each data.companies == { companyDetails: { name: '#notnull', location: '#notnull' } }

这也将起作用:

* match data.companies contains deep { companyDetails: { name: '#notnull' } }

有时最好在匹配之前转换 JSON:

* match each data..companyDetails contains { name: '#notnull' }

推荐阅读