嗨大家好,所以我正在编写Mocha测试来测试我的Node.js服务器。测试只需要检查我写的json文件IO实用程序是否可以正确写入文件。其中一个问题是我不确定如何在before函数中正确调用异步函数(返回kriskowal / q类型的promise)。在运行测试用例之前,我需要等待before部分中的async函数完成。
根据https://mochajs.org/#asynchronous-code,before函数需要进行“完成”回调才能等到完成。但是,由于我的函数返回一个promise,我可以简单地执行以下操作来使用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);
})
})
});
所以如果承诺解决,我会调用done(),如果承诺拒绝,则调用(错误)。是否保证等待before()完成?
答案 0 :(得分:1)
由于您的函数返回promise,您可以返回promise。在转向下一件事之前,摩卡将等待承诺得到解决或拒绝。不要在传递给done
,it
,before
的匿名函数的参数中声明after
,也不要将其调用。