我正在使用Pact进行消费者驱动合同测试。 在我的用例中,我的消费者“一些市场服务消费者”正在使用提供商“市场服务”。在一些市场服务消费者“生产”的合同看起来像这样:
{
"provider": {
"name": "market-service"
},
"consumer": {
"name": "some-market-service-consumer"
},
"interactions": [
{
"description": "Get all markets",
"request": {
"method": "GET",
"path": "/markets"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json; charset=utf-8"
},
"body": {
"markets": [
{
"phone": "HBiQOAeQegaWtbcHfAro"
}
]
},
"matchingRules": {
"$.headers.Content-Type": {
"regex": "application/json; charset=utf-8"
},
"$.body.markets[*].phone": {
"match": "type"
},
"$.body.markets": {
"min": 1,
"match": "type"
}
}
}
}
],
"metadata": {
"pact-specification": {
"version": "2.0.0"
},
"pact-jvm": {
"version": "3.3.6"
}
}
}
在提供者网站上,我使用的是pact-provider-verifier-docker¹。这是我的测试结果:
WARN: Ignoring unsupported matching rules {"min"=>1} for path $['body']['markets']
.....
@@ -1,7 +1,7 @@
{
"markets": [
... ,
- Pact::UnexpectedIndex,
+ Hash,
]
}
Key: - means "expected, but was not found".
+ means "actual, should not be found".
Values where the expected matches the actual are not shown.
似乎测试工作正常 - “手机”测试有效。 但在这一点上,我不知道(预期)“Pact :: UnexpectedIndex”是什么意思,以及它失败的原因。这种期望来自哪里,如何解决?
¹特别是我自己的版本,它使用最新的外部依赖项。
答案 0 :(得分:2)
正如您在此测试用例here中看到的那样,Pact :: UnexpectedIndex用于指示数组的长度超出预期。我认为它试图说的是数组末尾有一个额外的哈希值。 (我同意它一点都不清楚!我写了这段代码,所以我为它的混乱性质道歉。事实证明,编写pact代码最困难的部分是编写有用的diff输出。)
这个错误令人困惑的是,它应该允许你有额外的元素,因为你已经指定 Traceback (most recent call last):
File "/root/Desktop/testing.py", line 12, in <module>
connection.open(ip)
File "/usr/lib/python2.7/telnetlib.py", line 227, in open
self.sock = socket.create_connection((host, port), timeout)
File "/usr/lib/python2.7/socket.py", line 575, in create_connection
raise err
error: [Errno 110] Connection timed out
最小长度为1.也许docker验证程序使用版本1匹配而不是版本2?