Das ist eine Step-by-Step-Beschreibung, wie ich aktuell (2025-09-18) Playwright-Test-Coverage in Angular-Projekten erzeuge, ohne Webpack-Instrumentation.
In der Vergangenheit habe ich für UI-E2E-Tests die coverage-istanbul-loader-Instrumentation mit Webpack implementiert. Am Ende merge ich die Coverage der Karma-Tests mit der Coverage der Playwright-Tests (daran ändert sich nichts).
Mein Demo-Projekt liegt auf GitHub: https://github.com/brabenetz/angular-playwright-coverage Für die Git-History habe ich versucht, meine Schritte möglichst deutlich darzustellen:
Das Projekt startet mit “ng-new” und endet mit einem gemergten Test-Coverage-Report (Karma & Playwright), welcher über GitHub Actions gepublished wird.
Für weitere Details kann man die Quellen durchlesen:
Nichts zu tun hier! Solange die App eine Source-Map liefert (z. B. mit ng serve), kann der Chrome-Browser die Coverage erzeugen.
In meinen Projekten verwende ich eine kleine test-utils.ts-Implementierung:
(i) Der Vergleich mit einem Referenz-Screenshot funktioniert nur lokal (hauptsächlich wegen unterschiedlicher OS-Schriftarten), deshalb ist es gut, den Vergleich nur auszuführen, wenn man den ENV-Flag ‘SCREENSHOT_VALIDATION=true’ gesetzt hat.
Trotzdem ist der Screenshot-Vergleich nützlich bei jeder größeren Änderung oder einfach nur bei Library-Updates: Vor dem Update Referenzergebnisse generieren und nach dem Update den aktuellen Stand mit den alten Screenshots vergleichen.
Ich füge im package.json immer vier Scripts hinzu, die ich öfter benutze:
Dann brauche ich noch zwei Libraries:
Karma unterstützt bereits einfache Konfigurationen für Coverage:
In der Playwright-Config ist das Wichtigste, dass man den monocart-reporter hinzufügt. Für das Mergen der Coverage-Daten mit Karma-Coverage braucht man den ‘json’-Reporter.
Die Coverage sollte im Verzeichnis coverage/playwright landen.
In den Tests muss nur der Import ausgetauscht werden. Interessant sind die Files tests/_shared/app-fixtures.ts und tests/_shared/fixtures/v8-code-coverage.ts, die stattdessen verwendet werden.
Diese zwei Files stammen vom Monocart-Reporter-Beispiel-Projekt: https://github.com/edumserrano/playwright-adventures/blob/main/demos/code-coverage-with-monocart-reporter/tests/_shared/app-fixtures.ts
Nachdem Karma-Coverage (mit npm run test) und Playwright-Coverage (mit npm run playwright:test-all) generiert wurden, sollte man die Reports im Coverage-Ordner sehen:
Wichtig sind die JSON-Files ‘coverage-karma.json’ & ‘coverage-playwright.json’: Diese müssen im nächsten Schritt zusammen gemergt werden.
Den Merge teile ich auf drei Scripts auf:
Dann brauche ich noch zwei Libraries:
Am Ende möchte man die Playwright-Reports auch in der CI nach jedem Build sehen. Am Beispiel von GitHub Actions würde das so aussehen: