我正在努力寻找在使用异步/等待时验证承诺是否在 Mocha 测试中被拒绝的最佳方法。
这里有一个可行的示例,但是我不喜欢 should.be.rejectedWith
返回一个承诺,这个承诺需要从测试函数返回才能得到正确的计算。使用异步/等待消除了对测试值的这种要求(就像我对下面的 wins()
结果所做的那样) ,我觉得我很可能会在某个时候忘记返回语句,在这种情况下,测试总是会通过的。
// Always succeeds
function wins() {
return new Promise(function(resolve, reject) {
resolve('Winner');
});
}
// Always fails with an error
function fails() {
return new Promise(function(resolve, reject) {
reject('Contrived Error');
});
}
it('throws an error', async () => {
let r = await wins();
r.should.equal('Winner');
return fails().should.be.rejectedWith('Contrived Error');
});
感觉应该可以使用这样一个事实,即异步/等待将拒绝转换为异常,并将其与 Chai 的 should. throw 结合起来,但是我还不能确定正确的语法。
理想情况下,这种做法会奏效,但似乎并不奏效:
it('throws an error', async () => {
let r = await wins();
r.should.equal('Winner');
(await fails()).should.throw(Error);
});