首页 > 解决方案 > 空手道 - 将 Json 部分与父项匹配

问题描述

以下是用于匹配的 json 样本;匹配包含不起作用。

* def Parent = [{ a: 1, b: 'x' }, { a: 2, b: 'y' }]
* def Part = [{ a: 1 }, { b: 'y' }]
* match Parent contains '#(^Part)'

# Below throws exception too.
* match Parent contains Part

它抛出错误,

actual: [{"a":1,"b":"x"},{"a":2,"b":"y"}], expected: '#(^Part)', reason: actual value does not contain expected

标签: karate

解决方案


这是我认为最好的解决方案。花点时间去理解它;)

* def data = [{ a: 1 }, { b: 'y' }]
* def response = [{ a: 1, b: 'x' }, { a: 2, b: 'y' }]
* def expected = karate.map(data, function(x, i){ return '#(^data[' + i + '])' })
* match response contains only expected

由于我希望这个示例可以作为对其他示例的参考以及更多内容,因此这里有一个替代解决方案,它还展示了 0.9.0 中的新动态场景大纲。请注意如何karate.map()进行循环的一种方法,如果您查看文档和示例,还有其他方法。

Background:
  * def data = [{ a: 1 }, { b: 'y' }]
  * def parts = karate.map(data, function(x){ return { part: x } })
  * def response = [{ a: 1, b: 'x' }, { a: 2, b: 'y' }]

  Scenario Outline:
    * def part = <part>
    * match response contains '#(^part)'

    Examples:
      | parts |

推荐阅读