Bisher hat jede Lektion mit einem Blick in den Browser geprüft. Das trägt nicht lange: Eine Änderung bricht den Fehlerfall, den niemand mehr anklickt. Diese Lektion schreibt die Tests, die Kontaktliste
(Laden, Fehler, Filter) und den Fehler-Interceptor schützen, und führt sie mit ng test aus. Sie arbeiten in web/kladde-angular. K2 2.7 hat Testen im Allgemeinen geklärt; hier geht es um Angular.
Stand der Prüfung. Alle Tests dieser Lektion liefen in einem Wegwerfprojekt (Angular 22.2, Node 24.22.3, Vitest 5.1.0 mit jsdom):
ng test --no-watchExit-Code 0 mit 4 Dateien und 8 Tests (3 für die Liste, 3 für den Interceptor, 1 für die Karte, 1 der Wurzel). Ebenfalls gelaufen und hier mit ihrem Ergebnis genannt: der Test ohne Auslöser für die Anfrage (blieb hängen), der Fehlerfall gegen die erste Fassung der Liste (rot), ein Filter mitstartsWithstattincludes(Exit-Code 1) und ein Lauf ohne passende Dateien (Exit-Code 1). Liste und Interceptor sind Minimalfassungen (Namen wie in 0202); weicht Ihr Stand ab, passen Sie die Tests an. Nicht ausgeführt: Komponenten-Harnesses (das Paket@angular/cdkwar im Projekt nicht installiert), Karma, ein Lauf mit Browser statt jsdom,--coverage. Aussagen über Angular stammen von angular.dev (Seiten zu Tests, HTTP-Tests, Komponenten-Harnesses, am Schreibtag gelesen).
Was ng test tut
Neue Projekte bringen Vitest mit jsdom mit; Karma ist nach der Seite „Testing“ weiter möglich, für bestehende Projekte gibt es eine Migrationsanleitung. ng test baut die Anwendung im Beobachtungsmodus und startet den Läufer: Speichern einer Datei
startet die Tests neu. Setzt die Umgebung CI=true (die meisten Build-Server tun es), läuft ng test einmal und kehrt zurück; sonst geben Sie --no-watch --no-progress an. Für Sie heißt das: lokal npx ng test, im Skript und in der Pipeline npx ng test --no-watch.
Dann zählt der Exit-Code, nicht die Meldung (Lektion 0302 des WinUI-Kurses sagt dasselbe über dotnet test):
npx ng test --no-watch *> test.txt
"exit=$LASTEXITCODE"
Ein leerer Lauf ist kein grüner Lauf: Passt ein Muster mit --include auf keine Datei, meldet ng test „No tests found matching the following patterns“ und endet mit Exit-Code 1. Das ist erwünscht; eine Pipeline, die bei null Tests grün bleibt, hat
keine Aussagekraft. Die Tests stehen neben dem Code in *.spec.ts, die Typen für describe, it und expect kommen aus vitest/globals (tsconfig.spec.json).