Прежде чем запускать тесты Mocha, дождитесь инициализации маршрутов и базы данных. - PullRequest
0 голосов
/ 07 июня 2018

У меня есть приложение 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?

1 Ответ

0 голосов
/ 07 июня 2018

Вместо этого 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));
  });
});

Затем, после импорта, вы можете использовать его после вызова .then для Promise

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...