【发布时间】:2016-11-21 16:24:40
【问题描述】:
大家好,我正在编写 Mocha 测试来测试我的 Node.js 服务器。测试只需要检查我写的一个json文件IO实用程序是否可以正确写入文件。问题之一是我不确定如何在 before 函数中正确调用异步函数(返回 kriskowal/q 类型的承诺)。在运行测试用例之前,我需要等待之前部分中的异步函数完成。
根据https://mochajs.org/#asynchronous-code,before 函数需要进行“完成”回调才能等待完成。但是由于我的函数返回一个承诺,我可以简单地执行以下操作来利用 done 函数:?
describe("test create/read/delete json file", function () {
before(function (done) {
fileHelper.writeJsonFile(mailTypeFile, json, {spaces: 2}).then(function () {
done();
}).catch(function (error) {
done(error);
})
});
after(function (done) {
fileHelper.deleteFile(mailTypeFile).then(function () {
done();
}).catch(function (error) {
done(error);
})
});
it('should create mailtype', function (done) {
fileHelper.readJsonFile(mailTypeFile).then(function (data) {
expect(data).to.have.property('required');
expect(data).to.have.property('properties');
done();
}).catch(function (error) {
done(error);
})
})
});
因此,如果 promise 解决,我调用 done(),如果 promise 拒绝,我调用 done(err)。是否保证等待 before() 完成?
【问题讨论】: