首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在运行Mocha测试之前,请等待路由和数据库初始化

在运行Mocha测试之前,请等待路由和数据库初始化
EN

Stack Overflow用户
提问于 2018-06-08 03:45:58
回答 1查看 693关注 0票数 0

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

main.js (extract)

代码语言:javascript
复制
// 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)

代码语言:javascript
复制
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测试之前,有没有办法等待数据库和初始化的路由?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 03:53:19

main.js导出一个Promise,如下所示:

代码语言:javascript
复制
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之后使用它

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50749136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档