约定数组中某个字段的精确匹配
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
。
我正在为通过特定字段过滤掉响应数据的请求编写契约测试,因此我想创建一个匹配器来匹配对象数组,并在该字段上完全匹配。
我尝试了以下两种方法:
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
。