Definicja #
Karma to runner testów (test runner) dla JavaScriptu stworzony przez zespół Angular (Google). W odróżnieniu od frameworków testowych (Jasmine, Jest), Karma jest odpowiedzialna wyłącznie za uruchamianie testów — uruchamia serwer HTTP, otwiera przeglądarkę i raportuje wyniki do terminala.
Główne cechy Karma:
- Prawdziwe przeglądarki — uruchamia testy w Chrome, Firefox, Safari, Edge — wykrywa problemy specyficzne dla przeglądarki
- Headless mode — ChromeHeadless do testowania w CI/CD bez interfejsu graficznego
- Watch mode — automatyczne re-uruchamianie testów przy zmianach pliku
- Framework-agnostic — współpracuje z Jasmine, Mocha i innymi frameworkami
- Wtyczki reporterów — karma-junit-reporter, karma-coverage (Istanbul) do raportów XML i pokrycia
- Preprocessors — karma-webpack, karma-typescript do transpilacji kodu
Karma jest obecnie w trybie maintenance — oficjalny blog Angular ogłosił jej deprecację na rzecz Jest (bez przeglądarki) i Web Test Runner. Angular CLI od wersji 16/17 oferuje schematy migracji do Jest. Nowe projekty powinny używać Jest lub Vitest.
Zastosowania #
- Uruchamianie testów jednostkowych Angular w prawdziwej przeglądarce z pełnym środowiskiem DOM
- Konfiguracja CI/CD z ChromeHeadless dla automatycznych testów w pipeline'ach GitLab CI, GitHub Actions
- Generowanie raportów pokrycia kodu (Istanbul/nyc) przez karma-coverage dla analizy jakości
- Utrzymanie istniejących projektów Angular korzystających z Karma/Jasmine przed migracją na Jest
- Testowanie kodu zależnego od specyficznych funkcji przeglądarki (Web APIs) wymagających prawdziwego środowiska
Ścieżka nauki #
Karma jest preinstalowana w projektach Angular generowanych przez starsze wersje Angular CLI, więc wielu deweloperów używa jej bez głębszej konfiguracji. Oficjalna dokumentacja Angular Testing opisuje setup Karma/Jasmine.
Podstawowa konfiguracja Karma jest w pliku karma.conf.js — definiuje przeglądarki, frameworki, preprocessory i reportery. Dla CI/CD ważna jest konfiguracja ChromeHeadless i flag dla środowisk bez GPU.
Jednak biorąc pod uwagę deprecację Karmy, bardziej wartościową inwestycją czasu jest nauka Jesta. Angular CLI oferuje schematę migracji: ng add @angular/builders/jest. Dla nowych projektów Angular rekomenduje się bezpośrednie użycie Jest, który jest szybszy, nie wymaga przeglądarki i ma lepsze wsparcie TypeScript. Zasoby: blog.angular.io/moving-angular-cli-to-jest-and-web-test-runner.