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

在我的消费者testing结束时,我需要采取两个步骤:

  1. 最后确定模拟服务器
  2. 将该协议发布给经纪人。

起初,我在出版之前是这样发表的:

var opts = { //broker info } pact_node.publishPacts(opts).then(() => { provider.finalize() }).catch(() => { console.error("Could not publish pact!") provider.finalize() }) 

我意识到这一点是finalize()是pact文件写入的地方。 所以如果我按照这个顺序做事情,那么第一次运行testing时,什么都不会发布,随后的每一次我都会发布上一次运行的合同版本。 所以我试着颠倒了顺序,先完成模拟服务器,然后发布:

 provider.finalize().then(() => { console.log("Publishing pact to broker") pact_node.publishPacts(opts) }).catch(() => { console.error("Could not finalize provider!") }) 

但是就此而言, thencatch区块都不会被执行。 我没有得到任何消息打印到控制台。

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

最终确定后,发布协议应该是明确的。

我build议你在一个单独的任务中完成它,而不是与testing相同的代码,因为它只能从CI完成,而不是从本地机器完成。