我在同一个仓库中有两个项目,具有完全独立的目录结构(/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')
}
}
}
答案 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
,但协定验证不会作为测试运行。