javascript - 在运行 Mocha 测试之前等待路由和数据库初始化

标签 javascript node.js express callback mocha.js

我有一个 NodeJS 应用程序,它连接到 Mongo 数据库,然后在建立连接后初始化所有路由。我想使用服务器和 supertest 来添加一些 Mocha 测试来测试请求。但是,要从 test.js 文件检索服务器,我需要 require() 主文件并从中获取服务器变量。然而,当我尝试使用它时,它提示该变量未定义,因为数据库尚未加载并且路由尚未初始化。

main.js(摘录)

// This is a custom mongo module that connects using my db string
// It stores the DB as a variable in another file, which is later retrieved by the route handlers using mongo.GetDB()

mongo.ConnectToDB(function(err, dbo){
    if(err) throw err;

    require("./api")(app);
    require("./admin")(app);
    require("./routes")(app);
});

// This obviously doesn't work, as it's outside of the callback
module.exports.server = app.listen(4500);

server.test.js(摘录)

describe("loading express", (done) => {
    let server;
    beforeEach(() => {
        // The server is returned, but none of the routes are included
        server = require("../main").server;
    });

    afterEach(() => {
        server.close();
    });

    // ...
});

在检索服务器变量并继续Mocha测试之前,有什么方法可以等待数据库和路由初始化吗?

最佳答案

main.js导出一个Promise,例如:

module.exports.serverPromise = new Promise((resolve, reject) => {
  mongo.ConnectToDB(function(err, dbo){
    if(err) reject(err);
    require("./api")(app);
    require("./admin")(app);
    require("./routes")(app);

    resolve(app.listen(4500));
  });
});

然后,导入后,在Promise上调用.then后就可以使用了

关于javascript - 在运行 Mocha 测试之前等待路由和数据库初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50749136/

相关文章:

javascript - 在 javascript 中实现 if then else if else 堆栈的更简单方法是什么

javascript - 线接触或矩形或圆形

javascript - 在 Electron js 中打开辅助/子窗口时对象已被销毁

javascript - res.redirect 在表单提交后显示旧信息?

javascript - 有没有办法重新定义 Javascript charCodeAt 和 fromCharCode 从函数内调用的标准 Ascii 字符集?

javascript - 动态更改 iframe 标记源的脚本

javascript - 如何让我的 JavaScript 在网站上运行? (当前代码可以在 Fiddle 上运行,但不能在网站上运行)

javascript - 在第一场比赛中停止 Redis hget

html - 来自 Jade 的 sendFile ('/index.html' ) 和 render ('index' ) 之间的区别

node.js - 学习node.js/express.js : What's the deal with bin/www?