仅匹配项目列表的类型

问题描述 投票:0回答:1

我创建了这个项目来以更具交互性的方式展示我的问题。
我有一个端点,它返回一个包含对象列表的对象。我不想比较我的契约的实际值,我只想匹配类型。

我的契约看起来像这样:

  @Pact(consumer = "Consumer", provider = "Provider")
  fun multi(builder: PactBuilder): V4Pact {
    return builder
        .expectsToReceiveHttpInteraction("multi") { httpBuilder ->
          httpBuilder
              .withRequest { httpRequestBuilder ->
                httpRequestBuilder
                    .path("/multi")
                    .method("GET")
              }
              .willRespondWith { httpResponseBuilder ->
                httpResponseBuilder
                    .status(200)
                    .body(PactDslJsonBody()
                        .`object`("myData", PactDslJsonBody()
                            .eachLike("myData", 2)
                            .stringType("foo", "foo")
                            .`object`("bar", PactDslJsonBody()
                                .stringType("bar", "bar")
                            )
                        )
                    )
              }
        }
        .toPact()

不幸的是,它实际上不仅匹配示例列表的大小,还匹配字段的值。
两者都不想要。
由于单个返回工作正常,我认为它与 .eachLike("myData", 2) 有关。
知道我做错了什么以及如何改变它以获得我想要的结果吗?

我已经尝试在 Pact Slack 工作区询问,但不幸的是没有人可以帮助我:(

pact pact-jvm
1个回答
0
投票

问题似乎在于您在契约中给出了实际值。它匹配类型和值。这就是为什么它没有按照您想要的方式工作。

当您使用 stringType("foo", "foo") 之类的内容时,Pact 认为您希望键“foo”具有值“foo”。但你只想要任何字符串,对吗?

尝试使用 stringType("foo") 而不使用额外的“foo”。这样 Pact 就知道你想要一个字符串,但不关心它的值是什么。

与您的清单相同。确保当您使用eachLike时,您没有设置您不想匹配的确切值。

删除 Pact 设置中的特定值,只告诉它类型。那么 Pact 只会匹配类型,而不匹配实际数据。让我知道它是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.