约定数组中某个字段的精确匹配

Pact exact match of a field within an array

我正在为通过特定字段过滤掉响应数据的请求编写契约测试,因此我想创建一个匹配器来匹配对象数组,并在该字段上完全匹配。

我尝试了以下两种方法:

body: eachLike({
  color: 'red',
  name: like('any'),
}),

body: eachLike({
  color: extractPayload('red'),
  name: like('any'),
}),

Bot 两者产生相同的结果:

"matchingRules": {
  "$.body": {
    "min": 1
  },
  "$.body[*].*": {
    "match": "type"
  },
  "$.body[*].name": {
    "match": "type"
  }
}

在我看来,"$.body[*].*": {"match": "type"} 会否定 color 字段的精确匹配。我的假设是错误的,还是有解决此问题的正确方法?

是的,问题是 type 匹配是级联的,没有被重置。

equal 匹配器(仅限 V3)将重置此上下文的匹配规则。

它在最新的测试版中可用:https://github.com/pact-foundation/pact-js/tree/feat/v3.0.0#using-the-v3-matching-rules

要在 v2 中使用它,我会在此处使用匹配单个字符串值的 regex