摩卡测试错误断言超时



我的异步摩卡测试有一些问题。当输入结果为false时,promise中的assert方法会导致超时。(如果值为真,则可以正常工作)

这是问题的简化版本。我们通常用网络来代替这个构造好的承诺。

describe('test',  () => {
it('testcase', (done) => {
new Promise(async (res) => {
console.log("before");
assert(false);
console.log("after");
res(null);
}).then(() => done()).catch(() => done());
});
});
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

你最好不是在promise构造函数上使用async/await语法。这是一个反模式。

assert(false)将抛出一个错误,但是这个错误不会被.catch()方法捕获。更多信息请参见https://stackoverflow.com/a/43050114/6463558

所以你应该从promise构造函数中移除async。然后,assert(false)抛出的错误将被捕获。

import { assert } from 'chai';
describe('test', () => {
it('testcase', (done) => {
new Promise((res) => {
console.log('before');
assert(false);
console.log('after');
res(null);
})
.then(() => done())
.catch((err) => done(err));
});
it('testcase - 2', (done) => {
new Promise((res) => {
console.log('before');
assert(true);
console.log('after');
res(null);
})
.then(() => done())
.catch((err) => done(err));
});
});

测试结果:

test
before
1) testcase
before
after
✓ testcase - 2

1 passing (9ms)
1 failing
1) test
testcase:
AssertionError: Unspecified AssertionError
at /Users/dulin/workspace/github.com/mrdulin/expressjs-research/src/stackoverflow/66461468/index.test.ts:7:7
at new Promise (<anonymous>)
at Context.<anonymous> (src/stackoverflow/66461468/index.test.ts:5:5)
at processImmediate (internal/timers.js:439:21)

npm ERR! Test failed.  See above for more details.

最新更新