在 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 被解决或拒绝,然后再进行下一件事。不要在传递给 it
、before
、after
的匿名函数的参数中声明 done
,也不要调用它。
大家好,我正在编写 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 被解决或拒绝,然后再进行下一件事。不要在传递给 it
、before
、after
的匿名函数的参数中声明 done
,也不要调用它。