如何用mocha测试async代码?我想在mocha中使用多个await
var assert = require('assert');
async function callAsync1() {
// async stuff
}
async function callAsync2() {
return true;
}
describe('test', function () {
it('should resolve', async (done) => {
await callAsync1();
let res = await callAsync2();
assert.equal(res, true);
done();
});
});
这会产生以下错误:
1) test
should resolve:
Error: Resolution method is overspecified. Specify a callback *or* return a Promise; not both.
at Context.it (test.js:8:4)
如果我删除done(),我得到:
1) test
should resolve:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/tmp/test/test.js)
1条答案
按热度按时间yhxst69z1#
Mocha支持Promises开箱即用;你只需要
return
Promise到it()
的回调。如果Promise解析,则测试通过。相反,如果Promise拒绝,则测试失败。就这么简单
现在,由于
async
函数总是隐式地返回Promise
,所以你可以这样做:您不需要
done
或async
来实现it
。但是,如果您仍然坚持使用
async/await
:无论哪种情况,请勿将
done
声明为函数参数。如果你使用上面描述的任何方法,你需要从你的代码中完全删除
done
。将done
作为参数传递给it()
回调函数,提示Mocha您最终打算调用它。同时使用Promises * 和 *
done
将导致:错误:解析方法被过度指定。指定回调 * 或 * 返回Promise;不是两者都有
done
方法仅用于测试基于回调或基于事件的代码。如果你正在测试基于Promise的函数或async/await函数,你不应该使用它。