0

我在同一个仓库中有两个项目,具有完全独立的目录结构(消费者在/test-consumer,提供者在/app)。

/test-consumer/build/pacts正如预期的那样,消费者检查在 中输出一个 JSON Pact 文件

dependencies { test { systemProperties['pact.rootDir'] = "$buildDir/pacts" } }

然后我将文件复制到/app/build/pacts/中,并将同一systemProperties行放入我的提供商的build.gradle.

我抄袭的示例项目正在使用 Pact 经纪人,所以我想我可以把它拿出来,并用 . 替换它rootDir,但它不起作用。这就是我得到的:

WARNING: There are no consumers to verify for provider 'Coffee Ordering Provider'

因此,它似乎正在查找 Pact 文件,但在其中任何一个中都找不到提供者+消费者对。

TL;DR:我做错了什么?

以下是一些可以提供帮助的代码位:

dependencies {
  ...
  test { systemProperties['pact.rootDir'] = "$buildDir/pacts" }
}

pact {
  serviceProviders {
    'Coffee Ordering Provider' {
      port = 8080

      startProviderTask = startProvider
      terminateProviderTask = stopProvider
      stateChangeUrl = url('http://localhost:8080/pactStateChange')
    }
  }
}
4

1 回答 1

3

您收到该警告是因为您没有告诉协议插件在哪里可以找到协议文件。对于目录中的契约,添加以下内容:

pact {
  serviceProviders {
    'Coffee Ordering Provider' {
      port = 8080

      startProviderTask = startProvider
      terminateProviderTask = stopProvider
      stateChangeUrl = url('http://localhost:8080/pactStateChange')

      hasPactsWith('Coffee Ordering Consumers') {

          // Will define a consumer for each pact file in the directory.
          // Consumer name is read from contents of pact file
          pactFileLocation = file("$buildDir/pacts")

      }
    }
  }
}

请注意,您正在pact.rootDir为所有测试设置,但协议验证不会作为测试运行。

于 2017-04-13T01:34:34.733 回答