Karate 找到具有匹配响应[*]的数组中对象的索引

Karate 找到具有匹配响应[*]的数组中对象的索引,karate,Karate,是否有可能获得 *匹配响应。服务[*]包含{“服务”:“xyz”} 我希望以后在同一个服务对象上进行更具体的测试时重用它。 这里提到了一个\u循环变量,但我想我真的不知道如何应用它。我喜欢你的问题,你肯定把空手道推到了极限,我也不得不努力思考才能回答这些问题:) 匹配不允许您获得“找到的索引”或甚至是想到的“循环位置”-实际上可能与每个匹配相关-但我离题了 这需要额外的几行代码,我真的认为您需要升级到0.8.0。如果有帮助,我可以确认没有破坏性的更改(除非您使用独立的JAR) 新的karate.

是否有可能获得
*匹配响应。服务[*]包含{“服务”:“xyz”}

我希望以后在同一个服务对象上进行更具体的测试时重用它。
这里提到了一个
\u循环
变量,但我想我真的不知道如何应用它。

我喜欢你的问题,你肯定把空手道推到了极限,我也不得不努力思考才能回答这些问题:)

匹配
不允许您获得“找到的索引”或甚至是想到的“循环位置”-实际上可能与每个
匹配
相关-但我离题了

这需要额外的几行代码,我真的认为您需要升级到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]

如果您确实无法升级,您可以编写一个函数来手动循环阵列,上面的示例应该会为您提供一个解决方案。

这似乎正是我要寻找的。请耐心听我说,我下周要试试。顺便说一句,感谢您的超快支持。