Команда Klecks платформы AI Центра Т-Банка провела миграцию unit-тестов Angular с устаревшего стека Karma и Jasmine на современный Vitest. Старший разработчик Дмитрий Чепайкин объяснил, что переход был вызван тем, что Karma официально признан deprecated, а корректная выгрузка отчетов в Allure для unit-тестов перестала быть надежной. Инфраструктура тестирования включает три проекта: customer, operator и shared, где ранее использовался классический Angular-стек с Chrome Headless для запуска в CI, что создавало высокую нагрузку и проблемы с иерархией отчетов.
В ходе оценки альтернатив команда сначала экспериментировала с Jest, создав прототип, который подтвердил возможность миграции и работы с Allure. Однако для Angular-монорепо Jest показался компромиссным решением из-за необходимости поддерживать отдельный контур сборки, трансформацию зависимостей и совместимость с устаревшим API Jasmine. В итоге был выбран Vitest, интегрированный через AnalogJS (@analogjs/vitest-angular:test), что позволило сохранить запуск тестов через стандартный Angular CLI (ng test) и избежать создания параллельной системы запуска.
Ключевыми преимуществами новой конфигурации стали использование Vite-пайплайна для ускорения старта, нативная работа с ESM и прямая интеграция с Allure через репортер allure-vitest, который автоматически строит иерархию отчетов. Миграция API тестов была механической: функции вроде jasmine.createSpy() и spyOn() были заменены на vi.fn() и vi.spyOn(), а таймеры — на vi.useFakeTimers(). Также была адаптирована инфраструктурная логика, например, обработка необработанных ошибок в jsdom.
В результате миграции CI-процесс переехал на Node-образ без необходимости поднимать браузер для unit-тестов, а время выполнения джоб сократилось примерно на 36,4% (с 3 минут 40 секунд до 2 минут 20 секунд). Команда сознательно отказалась от нативного builder Angular (@angular/build:unit-test) в пользу Analog, чтобы получить полный контроль над конфигурацией, включая настройку воркеров VITEST_MAX_WORKERS=2 для экономии памяти в K8s и интеграцию кастомных репортеров. Теперь unit-слой полностью интегрирован в систему отчетности Allure наравне с e2e-тестами Playwright.