Json 如何使用空手道放置逻辑和断言动态数据

Json 如何使用空手道放置逻辑和断言动态数据,json,karate,Json,Karate,这是我对一个特定请求的一个答复 { "data": { "foo": [{ "total_value":200, "applied_value": [{ "type": "A", "id": 79806, "value": 200 }] }] } } 这是我对同一请求的另一个回复

这是我对一个特定请求的一个答复

{
    "data": {
        "foo": [{
            "total_value":200,
            "applied_value": [{
                "type": "A",
                "id": 79806,
                "value": 200
            }]
        }]
    }
}
这是我对同一请求的另一个回复

{
    "data": {
        "foo": [{
            "total_value":300,
            "applied_value": [{
                    "type": "A",
                    "id": 79806,
                    "value": 200
                },
                {
                    "type": "B",
                    "id": 79809,
                    "value": 100
                }
            ]
        }]
    }
}
我不确定在哪种情况下我会得到哪种回应 所以用例是 无论何时应用值中有2个值添加两个值并断言
只要应用值中只有1个值,就直接断言这里有一个可能的解决方案:

* def adder = function(array) { var total = 0; for (var i = 0; i < array.length; i++) total += array[i]; return total }
* def response =
"""
{
    "data": {
        "foo": [{
            "total_value":300,
            "applied_value": [{
                    "type": "A",
                    "id": 79806,
                    "value": 200
                },
                {
                    "type": "B",
                    "id": 79809,
                    "value": 100
                }
            ]
        }]
    }
}
"""
* def expected = get[0] response..total_value
* def values = $response..value
* def total = adder(values)
* match expected == total
* def total = 0
* def add = function(x){ karate.set('total', karate.get('total') + x ) }
* eval karate.forEach(values, add)