在我的消费者测试结束时,我需要采取两个步骤:
起初,我是在最终确定之前发布的,就像这样:
var opts = {
//broker info
}
pact_node.publishPacts(opts).then(() => {
provider.finalize()
}).catch(() => {
console.error("Could not publish pact!")
provider.finalize()
})
我意识到这一点是finalize()
是编写pact文件的地方。因此,如果我按此顺序执行操作,则第一次运行测试时,不会发布任何内容,并且随后每次都会发布上一次运行中的合同版本。所以我尝试颠倒顺序,先完成模拟服务器,然后发布:
provider.finalize().then(() => {
console.log("Publishing pact to broker")
pact_node.publishPacts(opts)
}).catch(() => {
console.error("Could not finalize provider!")
})
但是这样,then
和catch
块都不会被执行。我没有在控制台上打印任何消息。
发生了什么事?我应该在哪个订单中调用这些函数,为什么第二个订单不起作用?
答案 0 :(得分:2)
发布契约应该在完成后明确完成。
我建议你完全在一个单独的任务中完成,而不是与测试相同的代码,因为它应该只从CI完成,而不是从本地机器完成。