契约:在最终确定之前或之后向经纪人发布契约
pact: publish pact to broker before or after finalizing
在消费者测试结束时我需要执行 2 个步骤:
- 完成模拟服务器
- 将合约发布给经纪人。
一开始我是未定稿就发布,像这样:
var opts = {
//broker info
}
pact_node.publishPacts(opts).then(() => {
provider.finalize()
}).catch(() => {
console.error("Could not publish pact!")
provider.finalize()
})
我意识到 finalize()
是写入协议文件的地方。因此,如果我按照这个顺序做事,第一次 运行 测试时,不会发布任何内容,随后每次,我都会发布之前 运行 的合约版本。所以我尝试颠倒顺序,先完成模拟服务器,然后发布:
provider.finalize().then(() => {
console.log("Publishing pact to broker")
pact_node.publishPacts(opts)
}).catch(() => {
console.error("Could not finalize provider!")
})
但是有了这个,then
和 catch
块都不会被执行。我没有在控制台上打印任何消息。
这是怎么回事?我应该按哪个顺序调用这些函数,为什么第二个顺序不起作用?
发布协议一定要在定稿后完成。
我建议您完全在一个单独的任务中执行此操作,而不是使用与测试相同的代码,因为它只能在 CI 上执行,而不是在您的本地计算机上执行。
在消费者测试结束时我需要执行 2 个步骤:
- 完成模拟服务器
- 将合约发布给经纪人。
一开始我是未定稿就发布,像这样:
var opts = {
//broker info
}
pact_node.publishPacts(opts).then(() => {
provider.finalize()
}).catch(() => {
console.error("Could not publish pact!")
provider.finalize()
})
我意识到 finalize()
是写入协议文件的地方。因此,如果我按照这个顺序做事,第一次 运行 测试时,不会发布任何内容,随后每次,我都会发布之前 运行 的合约版本。所以我尝试颠倒顺序,先完成模拟服务器,然后发布:
provider.finalize().then(() => {
console.log("Publishing pact to broker")
pact_node.publishPacts(opts)
}).catch(() => {
console.error("Could not finalize provider!")
})
但是有了这个,then
和 catch
块都不会被执行。我没有在控制台上打印任何消息。
这是怎么回事?我应该按哪个顺序调用这些函数,为什么第二个顺序不起作用?
发布协议一定要在定稿后完成。
我建议您完全在一个单独的任务中执行此操作,而不是使用与测试相同的代码,因为它只能在 CI 上执行,而不是在您的本地计算机上执行。