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?