是否可以获得a的索引值
* match response.Services[*] contains { "Service": "xyz"}
我打算稍后再使用它,以对同一Service对象进行更具体的测试。
那里有对__loop
变量here的引用,但我想我不太了解如何应用它。
答案 0 :(得分:1)
我喜欢您的问题,您肯定将空手道推向了极限,我也必须认真思考才能回答这些问题:)
match
不允许您获得考虑到的“找到的索引”甚至“循环位置”-可能与match each
有关-但我离题了。
这将需要一些额外的代码行,我真的认为您需要升级到0.8.0。如果有帮助,我可以确认没有重大更改(除非您使用独立的JAR)。
新的karate.forEach()
和karate.match()
函数使您可以对数组进行非常复杂的操作。这里有两个例子:
Scenario: karate find index of first match (primitive)
* def list = [1, 2, 3, 4]
* def searchFor = 3
* def foundAt = []
* def fun = function(x, i){ if (x == searchFor) foundAt.add(i) }
* eval karate.forEach(list, fun)
* match foundAt == [2]
Scenario: karate find index of first match (complex)
* def list = [{ a: 1, b: 'x'}, { a: 2, b: 'y'}, { a: 3, b: 'z'}]
* def searchFor = { a: 2, b: '#string'}
* def foundAt = []
* def fun = function(x, i){ if (karate.match(x, searchFor).pass) foundAt.add(i) }
* eval karate.forEach(list, fun)
* match foundAt == [1]
如果您确实无法升级,则可以编写一个函数来手动循环遍历该阵列,以上示例将为您提供解决方案。