当前位置: 首页 > 知识库问答 >
问题:

Pact验证提供者,Pact::UndepretedIndex是什么意思?

邢雨华
2023-03-14

我正在使用Pact进行消费者驱动的合同测试。在我的usecase中,我的消费者“some-market-service-consumer”正在使用提供者“market-service”。在某个市场服务消费者处“产生”的合同如下所示:

{
"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"
    }
}

在provider-site上,我正在使用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::undexpectedindex”是什么意思,以及它为什么会失败。这种预期从何而来,如何修复?

特别是我自己的版本,它使用了最近的外部依赖。

共有1个答案

云隐水
2023-03-14

正如您在这个测试用例中看到的,这里使用pact::UndepretedIndex来指示数组是否比预期的长。我想它想说的是在数组的末尾有一个额外的散列。(我同意这一点并不清楚!这段代码是我写的,所以我为它的混乱性质道歉。原来编写pact代码最难的部分是编写有帮助的diff输出。)

该错误令人困惑的是,它应该允许您拥有额外的元素,因为您已经指定$.body.markets的最小长度为1。也许docker验证器正在使用版本1匹配而不是版本2?

 类似资料:
  • 我用Spring创建了一个REST服务。现在我想使用pact和JUnit5来测试消费者-提供者-通信。我已经有一个正在运行的pact-broker(来自https://github.com/jaimeniswonger/pact-broker-openshift)。消费者测试工作良好,并公布了协议。provider-test加载这些并尝试验证它们。但测试仅在验证成功时才上载结果。我尝试用suref

  • 我正在尝试使用pact jvm进行用户驱动合约测试,并且能够生成用户端合约文件。在提供者端验证过程中,如何提供公共API而不是localhost大多数示例只使用localhost作为提供者,请提供帮助

  • 关于测试提供程序,我有几个问题: 在进行测试之前,是否需要启动提供程序服务?我应该在测试中到达实际的提供者endpoint吗?例如,假设我的提供者代码库上有一个GET/dogsendpoint。运行测试时,是否需要在本地启动服务,点击/dogsendpoint,然后用pact文件验证为该endpoint返回的响应? 如果我想将其作为配置项管道的一部分运行(我使用的是Circloci),那么有哪些最

  • 我是新手。我的应用程序是一个spring boot应用程序。消费者在协议代理中创建了协议。现在我正在尝试从providers端运行测试,我正在使用gradle插件来运行测试。我有几个问题: > 使用者发布 协议没有指定任何状态。这意味着我不需要在提供者端使用任何stateChangeUrl? 我想实现的是:当我说pactVerify 服务器启动,我的Spring Boot应用程序应该在localh

  • 使用pact-jvm-consumer-junit主体可以具有 从而生成合同文件: 使用pact-net或pact-provider-verifier验证合同显示以下消息:warn:忽略路径$['body']['x']的不受支持的匹配规则{“match”=>“integer”} 当前的pact-provider-verifier是否能够读取包含“match”:“integer”的契约。pact-p

  • 我正在尝试在一个POST API(微服务)上应用契约测试。我已经编写了消费者端的测试用例,并且生成了协议,现在我正在尝试使用pact-python在提供者端验证协议。但我看不出有任何选项可以为API的POST调用输入输入体负载。到目前为止我有这个