Требование приложения Express в тестовом файле Mocha запускает сам сервер - PullRequest
0 голосов
/ 20 декабря 2018

Краткое описание: При написании тестов в Mocha для RESTful HTTP API, управляемого с помощью Express, с использованием Supertest, известно, что нам нужно require экземпляр приложения Express.Тем не менее, это требование require является, по-видимому, основной причиной открытого соединения после завершения и очистки тестов.Это странная и совершенно неожиданная ситуация.

Справочная информация: Рассматриваемое хранилище находится на GitHub в sakshamsaxena / uzay [1]. Тесты типичны по синтаксису, рекомендованному самим Super Test.,request создает сервер, а обратный вызов, переданный expect, закрывает сервер.Это было подтверждено добавлением console.log строк в файл библиотеки в node_modules.Проверено, что все соединения были изящно закрыты, и испытания прошли успешно.Никаких других уведомлений / предупреждений во время этого не было, но Мокко никогда не выходил сам по себе.Я хорошо осведомлен о поведении Mocha 4+ и исследовал это с помощью WTFNode.На SIGINT было замечено [2] [3], что экземпляр app все еще жив.Естественно, я дважды проверил это, закомментировав все тесты и снова запустив пакет с WTFNode, только чтобы увидеть точно такое же сообщение.Прямо сейчас у теста нет реального теста, только ожидающие тесты, и 2 требуют утверждений [4], где один из них явно виновник.Что происходит / что я делаю не так?

Ссылки:

[1]: https://github.com/sakshamsaxena/uzay/

[2]:

[WTF Node?] open handles:
- File descriptors: (note: stdio always exists)
  - fd 1 (stdio)
  - fd 2 (stdio)
- Servers:
  - :::3000 (HTTP)
    - Listeners:
      - request: app @ 
D:\Personal\uzay\node_modules\express\lib\application.js:617

[3]: https://github.com/myndzi/wtfnode/blob/a080e019f06187aa1e762ac9025bd22430d4129c/index.js#L512

[4]: ​​

const request = require('supertest')
const app = require('../index.js')

Вопрос: Не требуется запуск сервера экспресс-доставкисервер.Без явного вызова listen сервер не должен был бы запуститься, но это как-то происходит.Почему это происходит?Что может быть причиной этого?

1 Ответ

0 голосов
/ 20 декабря 2018

Вам нужен корень index.js в ваших тестах.require() фактически оценивает весь файл js, таким образом, будет выполнен вызов .listen().

Вы можете решить проблему, установив переменную окружения, которая будет установлена ​​только при выполнении теста, скажем, process.env.CI.Тогда

if (!process.env.CI) {
  app.listen(3000, function () {
    console.log('Uzay live on port 3000!')
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...