契约:在最终确定之前或之后向经纪人发布契约

pact: publish pact to broker before or after finalizing

在消费者测试结束时我需要执行 2 个步骤:

  1. 完成模拟服务器
  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!")
})

但是有了这个,thencatch 块都不会被执行。我没有在控制台上打印任何消息。

这是怎么回事?我应该按哪个顺序调用这些函数,为什么第二个顺序不起作用?

发布协议一定要在定稿后完成。

我建议您完全在一个单独的任务中执行此操作,而不是使用与测试相同的代码,因为它只能在 CI 上执行,而不是在您的本地计算机上执行。