match response while ignoring array order

左心房为你撑大大i 提交于 2021-02-05 07:05:17

问题


Given following response:

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

I want to match it no matter the order arrays are in.

I know I could do it with contains directive but I think that would require me to do multiple match patterns like:

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

Is there something like global config to ignore array order all together or do I have to roll with contains?


回答1:


The following works. You could also specify the size of the array if you want for example.

    * 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"}

Edit to match your more detailed case :

    * 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


来源:https://stackoverflow.com/questions/55709433/match-response-while-ignoring-array-order

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!