node.js - Mocha 异步回调和 Sequelize Promise 不同步?

标签 node.js asynchronous mocha.js sequelize.js es6-promise

我正在使用 mocha 编写测试用例及其钩子(Hook) beforeEach,它使用 sequelize.dropsequelize.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/

相关文章:

node.js - 为什么 findAll() 不返回模型中的所有对象?

node.js - 使用nodejs作为Websocket服务器的客户端。仍然是事件驱动的吗

node.js - 使用 React 构建网站并使用 firebase 作为数据库,我还需要后端吗? (例如 : Nodejs)

javascript - 制造阵列 - 为什么不同?

javascript - Angular ,函数回调的正确方法

Java异步调用用于目标输出的方法

javascript - 如何使用 mocha/jest 模拟/测试事件监听器?

PHP 和 node.js 共享 session 标识

node.js - NodeJS异步: multiple dependant HTTP API calls

javascript - 如何使用 Sinon 监视导入的函数?