我正在使用 mocha 编写测试用例及其钩子(Hook) beforeEach
,它使用 sequelize.drop
和 sequelize.sync
删除并重新创建所有表。
lib/testutils.js
exports.deleteAll = function () {
return sequelize.drop({logging: false, cascade: true}).then(function() {
return sequelize.sync({logging: false});
});
};
测试/ Controller /controllers.js
(A)这确实有效:
var testutils = require("../../lib/testutils");
describe("CRUD Controller", function() {
beforeEach(function(done) {
testutils.deleteAll().then(function(){
done();
}).catch(function(err) {
return done(err);
});
});
describe("#read()", function(){
it("should....", function(done) {
});
});
}
(B)这不起作用:
var testutils = require("../../lib/testutils");
describe("CRUD Controller", function() {
beforeEach(function(done) {
testutils.deleteAll().then(done).catch(function(err) {
return done(err);
});
});
describe("#read()", function(){
it("should....", function(done) {
});
});
}
我不明白为什么 testutils.deleteAll().then(done)
不起作用,并且第一个测试用例 it("should....", function(done)
没有等待 beforeEach
钩子(Hook)完成。我收到 TypeError: Convertingcircular Structure to JSON
。但是, testutils.deleteAll().then(function(){ done( ); })
确实有效。
我的问题是为什么(B) 不起作用而(A) 起作用?任何想法?有什么问题吗?
最佳答案
Mocha 支持 beforeEach 中的 Promise,因此只需编写以下代码:
beforeEach(function(){
return testutils.deleteAll();
});
关于node.js - Mocha 异步回调和 Sequelize Promise 不同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28038610/