我有一段代码,我正在Chai和Pact中测试。它看起来像这样:
var myVerify = () => {
provider.verify().then(() => {
console.log('B verified')
done()
})
}
expect(myVerify).to.not.throw()
这是有效的,但是为了确保我在继续进行测试之前等待Pact的验证完成,需要做很多额外的工作来制作包装函数。契约有一些内部状态,一旦完成就会清除。如果我只是这样称呼:
期望(provider.verify())。to.not.throw()
然后它会与其他测试冲突。
这段代码似乎对我很好,但它非常混乱。它有一个更简单的方法来实现这个目标吗?
答案 0 :(得分:1)
我不推荐这种方法,因为如果确实发生了错误,它永远不会被捕获,因为promises不会“抛出错误”,它们只是拒绝承诺,你可以使用{{1}来捕获或者是.catch
的第二个参数。
有两种方法可以做你想做的事:
1)与摩卡一起:
.then
在这个简单的例子中,我们没有使用chai来验证任何东西,因为你实际上并没有验证验证的数据输出,你只是检查一下是否成功,如果没有,抛出一个错误你的测试会失败。默认情况下,Mocha会理解承诺,只要它们作为测试的一部分返回。
但是,这种方法意味着包装return provider.verify().then(() => {
console.log('B verified');
done();
}, () => throw new Error("B verification failed"));
函数需要注入it
参数,我不喜欢它。我喜欢的是:
2)柴与Chai as Promised:
您需要使用
设置chaidone
然后在你的测试中,只需:
chai.use(require("chai-as-promised))
此测试将等待返回的承诺,并且chai将验证它实际上是否已满足且未被拒绝。我发现这种语法使用起来更简单,并使编写测试更简单。使用return expect(provider.verify()).to.eventually.be.fulfilled;
:
Promises.all