Не могу остановить экспресс-сервер после функции - PullRequest
1 голос
/ 23 мая 2019

У меня есть тесты узлов с этой before функцией:

before((done) => {
  app.startServer()
    .catch((err) => {
      done(err);
  });
});

Я сейчас пытаюсь написать функцию after, которая остановит сервер.

Я надеялся, что это может быть:

after(() => {
  app.stopServer(apiAddress)
    .catch((err) => {
      done(err);
    })
});

но это не работает.

Это мои express.js функции:

function startServer() {
  return new Promise((resolve, reject) => {
    app.listen(PORT, (err) => {
      if (err) reject(err);
      log.info(`Server listening on port ${PORT}`);
      resolve();
    });
  });
}

function stopServer(url) {
  return new Promise((resolve, reject) => {
    //const server = app.listen(url);
    app.close(url, (err) => {
      if (err) reject(err);
      log.info(`Server closed on ${url}`);
      resolve();
    });
  });
}

Как мне остановить сервер express в функции после?

Ответы [ 2 ]

1 голос
/ 23 мая 2019

В соответствии с этим вопросом переполнения стека и просмотром экспресс документации.

app.listen

Метод app.listen () возвращает объект http.Server и (для HTTP) является вспомогательным методом для следующего:


Метод close, который вы вызываете, является Http.close метод, который определяется следующим образом:

server.close([callback])

Таким образом, ваша функция должна выглядеть следующим образом:

function stopServer(url) {
  return new Promise((resolve, reject) => {
    app.close((err) => {
      if (err) reject(err);

      log.info(`Server closed on ${url}`);

      resolve();
    });
  });
}

Кроме того, вы должны знать, что closeФункция будет зависать, пока все соединения не будут закрыты.

Посмотрите на этот вопрос SO



ПРИМЕЧАНИЕ:

Вы можетеиспользуйте Util.promisify для упрощения синтаксиса

function startServer() {
  return Util.promisify(app.listen)(PORT);
}

function stopServer(url) {
  return Util.promisify(app.close)();
}

before((done) => {
  app.startServer()
    .then(() => done)
    .catch(done);
});

after(() => {
  app.stopServer()
    .then(() => done)
    .catch(done);
});
1 голос
/ 23 мая 2019

Мы используем пакет 'supertest' npm для тестирования приложений Express.js.Попробуйте эту хорошую вещь.https://www.npmjs.com/package/supertest

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