Pact verify provider,Pact::UnexpectedIndex 是什么意思?
Pact verify provider, what does Pact::UnexpectedIndex mean?
我正在使用 Pact 进行消费者驱动契约测试。
在我的用例中,我的消费者 "some-market-service-consumer" 使用提供者 "market-service"。 some-market-service-consumer 的合约 "produced" 如下所示:
{
"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.
似乎测试工作正常 - "phone" 测试有效。
但是在这一点上,我不知道(预期的)"Pact::UnexpectedIndex" 是什么意思,以及它失败的原因。这种期望从何而来,如何解决?
¹ 特别是我自己的版本,它使用最新的外部依赖项。
正如您在此测试用例中看到的那样 here Pact::UnexpectedIndex 用于指示数组比预期的要长。我认为它想说的是数组末尾有一个额外的散列。 (我同意它根本不清楚!我写了这段代码,所以我为它的混乱性质道歉。事实证明,编写契约代码最难的部分是编写有用的 diff 输出。)
这个错误令人困惑的是它应该允许你有额外的元素,因为你指定 $.body.markets
的最小长度为 1。也许 docker 验证器正在使用版本 1 匹配而不是版本 2?
我正在使用 Pact 进行消费者驱动契约测试。 在我的用例中,我的消费者 "some-market-service-consumer" 使用提供者 "market-service"。 some-market-service-consumer 的合约 "produced" 如下所示:
{
"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.
似乎测试工作正常 - "phone" 测试有效。 但是在这一点上,我不知道(预期的)"Pact::UnexpectedIndex" 是什么意思,以及它失败的原因。这种期望从何而来,如何解决?
¹ 特别是我自己的版本,它使用最新的外部依赖项。
正如您在此测试用例中看到的那样 here Pact::UnexpectedIndex 用于指示数组比预期的要长。我认为它想说的是数组末尾有一个额外的散列。 (我同意它根本不清楚!我写了这段代码,所以我为它的混乱性质道歉。事实证明,编写契约代码最难的部分是编写有用的 diff 输出。)
这个错误令人困惑的是它应该允许你有额外的元素,因为你指定 $.body.markets
的最小长度为 1。也许 docker 验证器正在使用版本 1 匹配而不是版本 2?