2017-10-14 59 views
1

后有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!") 
}) 

但与此,无论是then也不catch块不断得到执行。我没有收到任何消息打印到控制台。

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

回答

2

发布契约应在完成后明确完成。

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