在 Mocha 的 before 和 after 函数中调用 kriskowal 类型的 promise 函数

calling kriskowal type promise function in Mocha's before and after function

大家好,我正在编写 Mocha 测试来测试我的 Node.js 服务器。测试只需要检查我编写的 json 文件 IO 实用程序是否可以正确写入文件。其中一个问题是我不确定如何在 before 函数中正确调用异步函数(returns 一个 kriskowal/q 类型的承诺)。我需要等待前面部分中的异步函数在 运行 测试用例之前完成。

根据 https://mochajs.org/#asynchronous-code,before 函数需要进行 "done" 回调才能等待完成。但是由于我的函数 returns 有一个承诺,我可以简单地执行以下操作来利用 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() 完成?

由于您的函数 return 承诺,您可以 return 承诺。 Mocha 将等待 promise 被解决或拒绝,然后再进行下一件事。不要在传递给 itbeforeafter 的匿名函数的参数中声明 done,也不要调用它。