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

时间:2018-07-27 11:53:27

标签: karate

是否可以获得a的索引值 * match response.Services[*] contains { "Service": "xyz"}

我打算稍后再使用它,以对同一Service对象进行更具体的测试。 那里有对__loop变量here的引用,但我想我不太了解如何应用它。

1 个答案:

答案 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]

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