#typescript #jestjs #nestjs #ts-jest
Вопрос:
У меня есть приложение NestJS с различными модульными тестами, написанными с использованием Jest.
Проблема, с которой я сталкиваюсь, заключается в том, что Шутка дает мне очень противоречивые результаты. Если я запущу отдельный набор тестов, он может пройти, но иногда он потерпит неудачу. Точно так же, когда я запускаю все свои тесты, иногда все они проходят, а иногда один или два набора проваливаются.
В каждом из наборов тестов сервер памяти MongoDB настраивается в beforeAll
соединении и очищается в afterAll
соединении. Когда все наборы запущены, они выполняются с --runInBand
помощью аргумента. Использование no-cache
аргумента также не помогает.
Может ли кто-нибудь указать мне на то, что здесь происходит? Любая помощь будет признательна!
Комментарии:
1. попробуйте изменить все
beforeAll
beforeEach
, чтобы иafterAll
afterEach
когда это будет иметь смысл2. Хорошо, я буду экспериментировать с этим!
3. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
Ответ №1:
Такого рода проблемы обычно трудно решить. Это трудно диагностировать без знаний проекта, но я бы заподозрил расовое состояние любого рода. Иногда это может быть связано с проблемами с настройкой/очисткой тестов или тестами, зависящими друг от друга. Но в этом случае он не будет воспроизводиться при выполнении одного теста. Поэтому обязательно проверьте весь асинхронный связанный код. Убедитесь, что существует явный порядок всех зависимых задач и нет никаких предположений о порядке выполнения. Вы можете протестировать его, добавив журналы повсюду, и запускать тест до тех пор, пока он не завершится неудачно. Затем сравните журналы успешных/неудачных запусков.
Комментарии:
1. Я настроил ESLint в проекте и запустил его, чтобы проверить, нет ли неправильных обещаний, и он не сообщил ни о каких ошибках в проекте. Я добавлю журналы и посмотрю, даст ли это что-нибудь.
Ответ №2:
Спасибо вам за ваши ответы Алексей и Микаэлю. Я смог выяснить, что было не так с тестами.
После запуска каждого из наборов тестов как по отдельности, так и все вместе, моя команда смогла выявить проблему. Это всегда были два конкретных набора тестов, которые терпели неудачу. Оба они использовали службу, которая имела дело со случайными данными, и был случай, который не был обработан должным образом. И неудачные тесты предполагали, что этого сценария не произойдет. Но когда он появится, соответствующий тест(ы) завершится неудачей.