在Mocha的函数之前和之后调用kriskowal类型的promise函数

时间:2016-07-18 23:08:51

标签: node.js mocha q

嗨大家好,所以我正在编写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()完成?

1 个答案:

答案 0 :(得分:1)

由于您的函数返回promise,您可以返回promise。在转向下一件事之前,摩卡将等待承诺得到解决或拒绝。不要在传递给doneitbefore的匿名函数的参数中声明after,也不要将其调用。