我正在使用chai-as-promised来测试一些承诺。我的问题是我不确定如何在单个测试中包含多个期望语句。为了expect().to.be.fulfilled
使其正常工作,我需要将其退回,如下所示:
it('test', () => {
return expect(promise).to.be.fulfilled
}
...或使用notify
,像这样:
it('test', (done) => {
expect(promise).to.be.fulfilled.notify(done)
}
当我有另一件事需要检查时,问题就出现了,例如某个函数被调用,如下所示:
it('test', (done) => {
var promise = doSomething()
expect(sinon_function_spy.callCount).to.equal(1)
expect(promise).to.be.fulfilled.notify(done)
})
这里的问题是,因为doSomething()
是异步的,所以sinon_function_spy
当我调用它时可能还没有发生调用expect
,这使得这个测试变得不稳定。如果我使用 a then
,像这样:
it('test', (done) => {
var promise = doSomething()
promise.then(() => {
expect(sinon_function_spy.callCount).to.equal(1)
})
expect(promise).to.be.fulfilled.notify(done)
})
然后测试在技术上按预期通过和失败,但由于then
调用中抛出的异常,promise 被拒绝,它会失败。同样,如果我有一个承诺被拒绝的情况:
it('test', (done) => {
var promise = doSomething()
promise.then(() => {
expect(sinon_function_spy.callCount).to.equal(1)
})
expect(promise).to.be.rejected.notify(done)
})
然后检查sinon_function_spy
never 被调用,因为 promise 被拒绝并且没有调用then
。
如何让这两个expect
语句可靠地执行并返回正确的值?