PQR
@PQR

Как правильно протестировать Express приложение? Запуск http сервера — это норма или нет?

Вопрос: могу ли я протестировать express приложение не запуская http сервер?

Гуглил “how to test express app”, очень много примеров на связке mocha + chai + chai-http.

Однако, при внимательном изучении, обнаружил что chai-http под капотом быстренько создаётся сервер (звпускает `.listen()`), а по окончании тест останавливает сервер (.close()).

Цитата из документации: (https://www.chaijs.com/plugins/chai-http/)

You may use a function (such as an express or connect app) or a node.js http(s) server as the foundation for your request. If the server is not running, chai-http will find a suitable port to listen on for a given test.

When passing an app to request; it will automatically open the server for incoming requests (by calling listen()) and, once a request has been made the server will automatically shut down (by calling .close()).


Вопрос возник из моего PHP-бэкграунда: там для тестирования приложения обычно не запускают реальный HTTP сервер слушающий порт, ибо Symfony/Laravel/... приложению можно подсунуть заранее сформированный stub request, получить response и проверить его содержимое, при этом tcp стек никак не задействован, нет подкапотного .listen() / .close(). Это ощущается более надёжным, т.к. я хочу протестировать именно роутинг и хендлеры ручек своего приложения, не вовлекая сетевой стек и реальный http сервер.

Есть ли в этом желании смысл, практикуется ли такое с express приложениями? Или поднятие http сервера для тестов express приложения нормальная практика и не стоит беспокоиться, ибо http сервер “просто работает” и нет никаких проблем с его запуском в тестах?
  • Вопрос задан
  • 236 просмотров
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Не вижу ни каких проблем связанных с использованием http серева при тестах. Более того, экспресс сам по себе является таким сервером, и все его роутеры завязаны на него, получая в реквесте кучу информации, включая http заголовки и много чего еще. Теоретически наверно можно создать систему тестирования, работающую без запуска реального сервера, но для этого по крайней мере прийдется написать свой велосипед, который будет делать вид что он http сервер и подсунуть его в экспесс вместо реального. Более того, такой велосипед должен будет в полном объеме эмулировать api модуля http. Возможно такой велик даже существует, но все это кажется мне гораздо более ненадежным и неимеющим смысла. Хотя решать конечно Вам.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы