Почему набор тестов для шуток может случайно завершиться неудачей?

#typescript #jestjs #nestjs #ts-jest

Вопрос:

У меня есть приложение NestJS с различными модульными тестами, написанными с использованием Jest.

Проблема, с которой я сталкиваюсь, заключается в том, что Шутка дает мне очень противоречивые результаты. Если я запущу отдельный набор тестов, он может пройти, но иногда он потерпит неудачу. Точно так же, когда я запускаю все свои тесты, иногда все они проходят, а иногда один или два набора проваливаются.

В каждом из наборов тестов сервер памяти MongoDB настраивается в beforeAll соединении и очищается в afterAll соединении. Когда все наборы запущены, они выполняются с --runInBand помощью аргумента. Использование no-cache аргумента также не помогает.

Может ли кто-нибудь указать мне на то, что здесь происходит? Любая помощь будет признательна!

Комментарии:

1. попробуйте изменить все beforeAll beforeEach , чтобы и afterAll afterEach когда это будет иметь смысл

2. Хорошо, я буду экспериментировать с этим!

3. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Ответ №1:

Такого рода проблемы обычно трудно решить. Это трудно диагностировать без знаний проекта, но я бы заподозрил расовое состояние любого рода. Иногда это может быть связано с проблемами с настройкой/очисткой тестов или тестами, зависящими друг от друга. Но в этом случае он не будет воспроизводиться при выполнении одного теста. Поэтому обязательно проверьте весь асинхронный связанный код. Убедитесь, что существует явный порядок всех зависимых задач и нет никаких предположений о порядке выполнения. Вы можете протестировать его, добавив журналы повсюду, и запускать тест до тех пор, пока он не завершится неудачно. Затем сравните журналы успешных/неудачных запусков.

Комментарии:

1. Я настроил ESLint в проекте и запустил его, чтобы проверить, нет ли неправильных обещаний, и он не сообщил ни о каких ошибках в проекте. Я добавлю журналы и посмотрю, даст ли это что-нибудь.

Ответ №2:

Спасибо вам за ваши ответы Алексей и Микаэлю. Я смог выяснить, что было не так с тестами.

После запуска каждого из наборов тестов как по отдельности, так и все вместе, моя команда смогла выявить проблему. Это всегда были два конкретных набора тестов, которые терпели неудачу. Оба они использовали службу, которая имела дело со случайными данными, и был случай, который не был обработан должным образом. И неудачные тесты предполагали, что этого сценария не произойдет. Но когда он появится, соответствующий тест(ы) завершится неудачей.