Команда Klecks Т-Банка заменила Karma на Vitest для тестирования Angular и наладила отчетность в Allure

Источник
С Karma на Vitest: как мы обновляли unit-тесты Angular и починили Allure

Команда 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.

Текст подготовлен нейросетью Loople по материалам источника.

Читайте также

Похожие новости

ВКонтакте перевел продукт на сервисную архитектуру при ежедневной аудитории 65 млн человек

Как ВКонтакте разделила продукт на сценарии, создала платформу разработки и перевела веб на SPA, пока соцсетью продолжали пользоваться кажд…

Поиск по Loople

Назад