我可以让柴的expect.to.thot.throw同步吗?

我有一个代码片段,我正在Chai和Pacttesting。 它看起来像这样:

var myVerify = () => { provider.verify().then(() => { console.log('B verified') done() }) } expect(myVerify).to.not.throw() 

这样做是有效的,但是在继续进行testing之前,要做一个包装函数来确保我等待Pact的validation完成。 协议有一些内部状态,完成后会清除。 如果我只是打电话给这个:

期待(provider.verify())。to.not.throw()

那么它将与其他testing冲突。

这段代码似乎对我很好,但是非常混乱。 它有一个更简单的方法来完成这个?

我不会推荐这种方法,因为如果事实上发生了错误,它永远不会被捕获,因为承诺不会“抛出错误”,他们只是拒绝承诺,你可以捕获使用.catch或作为第二个参数那么。

有两种方法可以做你想做的事情:

1)只有摩卡:

 return provider.verify().then(() => { console.log('B verified'); done(); }, () => throw new Error("B verification failed")); 

在这个简单的例子中,我们没有使用chai来validation任何事情,因为你实际上没有validation数据输出的validation,你只是检查,看看是否成功,如果没有,抛出一个错误,将会失败试验。 摩卡默认情况下,只要它们作为testing的一部分返回,就会理解承诺。

但是,这个方法意味着包装itfunction需要注入done参数,我不是一个粉丝。 我很喜欢使用的是:

2)柴与柴承诺 :

您需要按照承诺使用设置柴

 chai.use(require("chai-as-promised)) 

那么在你的testing中,简单地做:

 return expect(provider.verify()).to.eventually.be.fulfilled; 

这个testing将等待承诺返回,柴将validation它实际上已经完成,而不是被拒绝。 我发现这个语法使用起来更简单,并且使得编写testing变得更简单。 你也可以有相同的承诺,使用Promises.all多个期望:

 var verify = provider.verify(); return Promises.all( expect(verify).to.eventually.be.fulfilled, expect(verify).to.eventually.be.true, );