代码之家  ›  专栏  ›  技术社区  ›  Pebermynte Lars

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

  •  1
  • Pebermynte Lars  · 技术社区  · 6 年前

    是否可以获取 * match response.Services[*] contains { "Service": "xyz"}

    我希望稍后在同一个服务对象上对它进行更具体的测试。 这里提到了 __loop 变量 here 但我想我真的不知道如何应用它。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Peter Thomas    6 年前

    我喜欢你的问题,你肯定是在把空手道推向极限,我也不得不努力回答这些问题:)

    这个 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]
    

    如果你真的不能升级,你可以写一个函数来手动循环数组,上面的例子应该会给你一个解决方案。