忽略数组顺序时匹配响应

时间:2019-04-16 13:31:24

标签: karate

给出以下回应:

* def resp = {"a":[{"c": 2},{"c": 1}, {"c":3}], "b":[6,5,4]}

无论顺序数组在哪里,我都想匹配它。

我知道我可以使用contains指令来做到这一点,但我认为这需要我执行多种匹配模式,例如:

  * match resp.a.[*].c contains [3,2,1]
  * match resp.b contains [5,4,6]

是否存在诸如全局配置之类的东西来完全忽略数组顺序,还是我必须滚动包含对象?

1 个答案:

答案 0 :(得分:2)

以下作品。例如,您也可以指定数组的大小。

    * def response = {"a":[2,1,3], "b":[6,5,4]}
    * match response.a contains [3,2,1]
    * match response.b contains [5,4,6]
    * match response == {"a": "#[] #? _ <4, _ >0", "b": "#[] #? _ <7, _ >3"}

根据您的详细情况进行编辑:

    * def resp = {"a":[{"c": 2},{"c": 1}, {"c":3}], "b":[6,5,4]}
    * def inside = {"c" : "#number"}
    * def schema = { "a": "#[] #(inside)", "b": "#[] #number" }
    * match resp == schema