使用 Mocha 在测试异步函数的时候非常简单,只需要在回调结束的时候手动调用一下回调函数即可。向 it() 中添加一个回调函数(通常命名为 done() ),Mocha 就会知道应该等待函数调用之后完成测试。
describe('#product', () => {
it('should be array', (done) => {
product.get((products) => {
products.should.be.a.Array();
done();
});
});
});
使用 PROMISE
现在越来越多的 node 使用 Promise 来编写,Promise 的测试也是非常有必要的。
写 Promise 的时候,直接返回一个 Promise 来代替上面的 done() 回调函数。
describe('#feature', () => {
it('should be array', () => feature.get().then((data) => {
data.should.be.a.Array();
}));
});
注意:
在 Mocha v3.0.0 或者更新的版本中,如果既返回 Promise,又调用 done(),会抛出异常,两者只能选其一不能同时使用。在老版本中,两者同时使用时,done() 默认被忽略。
使用 ASYNC / AWAIT
如果运行环境支持 async / await 的时候(需 Node 版本高于或等于 v7.6.0),上面的例子可以这样书写:
describe('product.getFeature', () => {
it('should be array', async () => {
const features = await product.getFeature();
features.should.be.a.Array();
});
});
这样一来,语义更加清晰了。