-
-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Ваш запрос связан с проблемой?
Тесты пакета @mirta/cli стабильно проходят локально (Windows и Linux), но нестабильны в CI окружении. В настоящее время применён временный workaround через условную изоляцию Vitest (isolate: !!process.env.CI в packages/mirta-testing/src/config/index.ts), что делает поведение тестов зависимым от окружения и может скрывать проблемы состояния между тестовыми файлами при локальной разработке.
Backlinks:
- PR feat: introduce staged-args package #161: feat: introduce staged-args package #161
- Discussion: feat: introduce staged-args package #161 (comment)
Опишите предпочтительное решение
Найти и устранить первопричину нестабильности тестов @mirta/cli в CI, чтобы можно было вернуться к детерминированному значению isolate (предпочтительно false для скорости) без потери стабильности в CI.
Решение должно включать:
- Идентификацию конкретных тестов или условий, вызывающих нестабильность в CI
- Устранение источника нестабильности (race conditions, утечки состояния, проблемы с async операциями, глобальными моками, файловой системой или process state)
- Убедиться, что все тесты корректно очищают состояние в
afterEach/beforeEach - Возврат к
isolate: false(или другому детерминированному значению) с подтверждением стабильности в CI
Уже видели эту реализацию где-нибудь?
Направления для исследования (на основе анализа CodeRabbit):
- Timing/race conditions: проверить async операции, которые могут завершаться не полностью перед началом следующего файла
- Глобальные моки: убедиться, что все
vi.mock()иvi.spyOn()корректно сбрасываются - File system state: если тесты создают временные файлы/директории, проверить их очистку
- Process state: переменные окружения, event listeners, таймеры
Примеры правильной изоляции из других пакетов монорепозитория:
@mirta/env-loader: используетbeforeEach(resetTestEnv)иafterEach(restoreTestEnv)для полной изоляцииprocess.env
Опишите альтернативные варианты, которые Вы рассматривали
Альтернативы:
- Оставить текущий workaround (
isolate: !!process.env.CI) — не рекомендуется, т.к. скрывает проблемы локально - Установить
isolate: trueвсегда — решает проблему, но замедляет тесты для всех пакетов - Использовать per-project override для
@mirta/cli— промежуточное решение, но не устраняет первопричину
Pull Request
- Я планирую подготовить Pull Request