Краткое описание: При написании тестов в 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
сервер не должен был бы запуститься, но это как-то происходит.Почему это происходит?Что может быть причиной этого?