链接then(done, done),该c2同时处理承诺的解决和拒绝. it('resolves', (done) => { resolvingPromise.then( (result) => { expect(result).to.equal('promise resolved'); }).then(done, done); });兑现承诺: it('resolves', () => { return resolvingPromise.then( (result) => { expect(result).to.equal('promise resolved'); }); });使用异步/等待: it('assertion success', async () => { const result = await resolvingPromise; expect(result).to.equal('promise resolved'); });I have this test of nodejs when testing I get a error of done function not declared.Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.My test code is, I have the done call back but still getting the error to call the done(); it('remove existing subdocument', (done) => { const Vic = new User({ name: 'Vic', posts: [{ title: 'Leaning Nodejs' }] }); vic.save() .then(() => User.findOne({ name: 'Vic' })) .then((user) => { const post = user.posts[0]; post.remove(); return user.save(); }) .then(() => User.findOne({ name: 'Vic' })) .then((user) => { assert(user.posts.length === 0); done(); }); }); 解决方案 I was facing the same issue, @MFAL's link in comment helped. I am expanding upon it.When there is an error/incorrect assertion an error is raised inside the promise. This leads to promise rejection. Once rejected done is never called and mocha reports time out.I solved this by writing a .catch block and chaining it with the promise: it('resolves', (done) => { fooAsyncPromise(arg1, arg2).then((res, body) => { expect(res.statusCode).equal(incorrectValue); done(); }).catch(done); });Other ways as mentioned in the Wietse's blog are:To chain a then(done, done) which handles both resolve and reject of the promise. it('resolves', (done) => { resolvingPromise.then( (result) => { expect(result).to.equal('promise resolved'); }).then(done, done); });Return a promise: it('resolves', () => { return resolvingPromise.then( (result) => { expect(result).to.equal('promise resolved'); }); });Use async/wait: it('assertion success', async () => { const result = await resolvingPromise; expect(result).to.equal('promise resolved'); }); 这篇关于对于异步测试和挂钩,请确保"done()"叫做;如果返回承诺,请确保它解决了的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 10-28 22:18