提供者pactVerify没有获取JSON Pact文件

时间:2017-04-13 01:00:01

标签: gradle groovy kotlin pact

我在同一个仓库中有两个项目,具有完全独立的目录结构(/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')
    }
  }
}

1 个答案:

答案 0 :(得分:3)

你收到了警告,因为你没有告诉pact插件在哪里找到pact文件。对于目录中的pacts,添加以下内容:

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,但协定验证不会作为测试运行。