我可以让柴的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的一部分返回,就会理解承诺。
但是,这个方法意味着包装it
function需要注入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, );