繁体   English   中英

等待路由和数据库初始化,然后再运行Mocha测试

[英]Wait for routes and database to initialize before running Mocha tests

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

main.js (extract)

// 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 (extract)

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();
    });

    // ...
});

检索server变量和继续执行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后使用它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM