我合同中的匹配规则被忽略。我有一份合同,需要确保某些值是字符串。在运行verify命令时,由于测试正在寻找完全匹配的内容,因此出现错误。我在使用者端(javascript)pact Matchers中使用,以便仅检查数据类型,而不检查值本身。该提供程序是使用pact版本1.20.0的Rails应用程序。
我也尝试过使用正则表达式,但问题仍然存在。
这是合同的样子。 我已经删除了一些敏感数据。
{
"consumer": {
"name": "consumer"
},
"provider": {
"name": "provider"
},
"interactions": [
{
"description": "a request",
"providerState": "provider state",
"request": {
"method": "POST",
"path": "/path/api/stuff",
"headers": {
"Authorization": "Bearer token",
"Content-Type": "application/json"
}
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json; charset=utf-8"
},
"body": {
"source_code": "abcdef"
},
"matchingRules": {
"$.body": {
"match": "type"
}
}
}
}
],
"metadata": {
"pactSpecification": {
"version": "3.0.0"
}
}
}
这是我得到的错误。
Diff
--------------------------------------
Key: - is expected
+ is actual
Matching keys and values are not shown
{
- "source_code": "abcdef"
+ "source_code": "xde5r8"
}
Description of differences
--------------------------------------
* Expected "abcdef" but got "xde5e3" at $.source_code
我希望这个测试能够成功,因为我希望类型匹配,并且在这种情况下,两个响应都是字符串。也许我在这里错过了一些东西。
答案 0 :(得分:0)
这似乎是v3主体匹配器,并非所有语言实现都共享(参见[1])。您使用的消费者语言(例如Pact JVM)可能会生成v3合同,但正在被v2提供程序(例如Pact JS)验证。