在空手道Netty场景中匹配请求中的键值对

问题描述

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

例如:

在这一个具有嵌套对象数组的请求中,我希望在任何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,但这也不可行。

解决方法

好消息,在Karate 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中定义,以便在需要时更轻松:https://stackoverflow.com/a/59415796/143475