在 Karate Netty 场景中匹配请求中的键值对

Matching key value pairs in a request in a Karate Netty scenario

我正在为 Karate Netty 模拟服务编写功能,我正在尝试使用场景来匹配请求中的键值对。

例如:

在像这样具有嵌套对象数组的请求中,我希望在任何 Id 值为 null 时触发此功能:

{
    "Array": [

        {
            "Id": "legitId"
        },
        {
            "Id": null
        }
    ],
}

场景:pathMatches('path/to/my/endpoint') && methodIs('post') && request.Array.contains('Id': null)

文档说我可以在场景中使用 JS 表达式,但是我很难找到 nashorn 可以解析的可以做到这一点的东西。我已经尝试了 JSON.stringify 和 indexOf,一些在空手道测试中用于匹配的语法,仍然没有成功。我还尝试使用 Array 索引的通配符来表示类似 Array[*].Id == null 的内容,但这也不行。

好消息,在空手道 0.9.6 中,您可以为此使用 JsonPath 和 karate.match()

Scenario: karate.match("request.Array[*].Id contains null").pass

更多详情:https://github.com/intuit/karate/issues/1202#issuecomment-653632397

另请参阅此其他答案,了解有关使用自定义函数的想法。在 Background 中定义,以便在需要时更容易: