在空手道中,是否可以使用模糊匹配标记构建逻辑AND / OR构造?像这样:
* def response = {a:1, {b:null, c:2}}, {a:2, {b:[x,y,z], c:3}
* match each response == {a:'#number', {b:('#present' && ('#null' || '#array'), c:'#number'}
基本上,检查键b
是否存在 并且 的值为 null < em> OR 一个 JSON数组
答案 0 :(得分:0)
我建议您将比赛分为2个步骤,以免使事情复杂化:
* def response = [{ a: 1, b: null, c: 2 }, { a: 2, b: [x, y, z], c: 3 }]
* match each response contains { b: '#present' }
* match each response == { a: '#number', b: '##array', c: '#number' }
您可以结合使用“标记”和“自我”参考-参见此处的最后一个示例:https://github.com/intuit/karate#self-validation-expressions
* match each response == { a: '#number', b: '##array? _ != null', c: '#number' }
为完整性起见,这是另一个选择。请注意,isValid()
函数是可重复使用的,并且仅需要(全局)定义一次。
* def isValid = function(x){ return !x || karate.match(x, '#array').pass }
* match each response == { a: '#number', b: '#? isValid(_)', c: '#number' }