Skip to content

[mirta-cli] Улучшить стабильность тестов без зависимости от Vitest isolate #162

@coderabbitai

Description

@coderabbitai

Ваш запрос связан с проблемой?

Тесты пакета @mirta/cli стабильно проходят локально (Windows и Linux), но нестабильны в CI окружении. В настоящее время применён временный workaround через условную изоляцию Vitest (isolate: !!process.env.CI в packages/mirta-testing/src/config/index.ts), что делает поведение тестов зависимым от окружения и может скрывать проблемы состояния между тестовыми файлами при локальной разработке.

Backlinks:

Опишите предпочтительное решение

Найти и устранить первопричину нестабильности тестов @mirta/cli в CI, чтобы можно было вернуться к детерминированному значению isolate (предпочтительно false для скорости) без потери стабильности в CI.

Решение должно включать:

  1. Идентификацию конкретных тестов или условий, вызывающих нестабильность в CI
  2. Устранение источника нестабильности (race conditions, утечки состояния, проблемы с async операциями, глобальными моками, файловой системой или process state)
  3. Убедиться, что все тесты корректно очищают состояние в afterEach/beforeEach
  4. Возврат к isolate: false (или другому детерминированному значению) с подтверждением стабильности в CI

Уже видели эту реализацию где-нибудь?

Направления для исследования (на основе анализа CodeRabbit):

  1. Timing/race conditions: проверить async операции, которые могут завершаться не полностью перед началом следующего файла
  2. Глобальные моки: убедиться, что все vi.mock() и vi.spyOn() корректно сбрасываются
  3. File system state: если тесты создают временные файлы/директории, проверить их очистку
  4. Process state: переменные окружения, event listeners, таймеры

Примеры правильной изоляции из других пакетов монорепозитория:

  • @mirta/env-loader: использует beforeEach(resetTestEnv) и afterEach(restoreTestEnv) для полной изоляции process.env

Опишите альтернативные варианты, которые Вы рассматривали

Альтернативы:

  1. Оставить текущий workaround (isolate: !!process.env.CI) — не рекомендуется, т.к. скрывает проблемы локально
  2. Установить isolate: true всегда — решает проблему, но замедляет тесты для всех пакетов
  3. Использовать per-project override для @mirta/cli — промежуточное решение, но не устраняет первопричину

Pull Request

  • Я планирую подготовить Pull Request

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions