Mocha 测试假断言超时
Mocha test false assert timeouts
我的异步 mocha 测试有问题。当输入评估为 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()
方法捕获。有关详细信息,请参阅
因此您应该从 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/Whosebug/66461468/index.test.ts:7:7
at new Promise (<anonymous>)
at Context.<anonymous> (src/Whosebug/66461468/index.test.ts:5:5)
at processImmediate (internal/timers.js:439:21)
npm ERR! Test failed. See above for more details.
我的异步 mocha 测试有问题。当输入评估为 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()
方法捕获。有关详细信息,请参阅
因此您应该从 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/Whosebug/66461468/index.test.ts:7:7
at new Promise (<anonymous>)
at Context.<anonymous> (src/Whosebug/66461468/index.test.ts:5:5)
at processImmediate (internal/timers.js:439:21)
npm ERR! Test failed. See above for more details.