JavaScript-Testabdeckung: Tools und Code-Metriken

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Codeabdeckung durch Tests in JavaScript: Tools und Metriken

\n\n

Stellen Sie sich vor, Sie sind der Kapitän eines riesigen Ozeandampfers. Ihr Team überprüft gewissenhaft die Motoren, die Navigation und die Sicherheitssysteme. Doch eines Tages entscheiden Sie sich, das Kühlsystem nicht zu überprüfen, weil „es gestern noch funktioniert hat“. Das Ergebnis ist vorhersehbar: Überhitzung, Panne, und Sie treiben auf offener See. In der Welt von JavaScript nennt man diese Sorglosigkeit „fehlende Codeabdeckung durch Tests“.

\n\n

Sie schreiben Tests – das ist großartig. Aber wie können Sie sicher sein, dass Sie wirklich alles überprüft haben und nicht nur eine Illusion von Sicherheit geschaffen haben? Die Antwort sind Codeabdeckungsmetriken. Sie zeigen, welcher Teil Ihrer Anwendung während der Tests ausgeführt wurde. Ohne diese Metriken riskieren Sie, einen kritischen Fehler zu übersehen, der sich in einem ungetesteten Bedingungszweig versteckt.

\n\n

In diesem Artikel werden wir uns ansehen, wie man die Codeabdeckung durch Tests in JavaScript richtig misst, welche Tools es dafür gibt und wie man die Metriken interpretiert, um sich selbst nicht zu schaden. Tauchen wir ein in die Welt des Code Coverage – ohne Langeweile!

\n\n

Was ist Codeabdeckung und warum ist sie wichtig?

\n\n

Codeabdeckung (Code Coverage) ist eine Metrik, die angibt, wie viele Zeilen, Funktionen oder Verzweigungen Ihres Codes bei der Ausführung der Tests durchlaufen wurden. Einfach ausgedrückt ist es der Prozentsatz des „geprüften“ Codes.

\n\n

Viele Entwickler betrachten 100% Abdeckung als den heiligen Gral. Das ist aber nicht ganz richtig. Abdeckung ist ein Werkzeug, kein Ziel. Sie hilft dabei:

\n\n
    \n
  • „Toten“ Code zu finden, der nie ausgeführt wird (und möglicherweise nicht benötigt wird).
  • \n
  • Zu verstehen, welche Codebereiche ohne Tests geblieben sind, und das Risiko einzuschätzen.
  • \n
  • Das Vertrauen in Refactorings zu stärken: Wenn die Abdeckung nicht gesunken ist, haben Sie nichts kaputt gemacht.
  • \n
\n\n

Es gibt jedoch auch Fallstricke. 100% Abdeckung garantiert nicht die Abwesenheit von Fehlern. Sie können alle Zeilen überprüfen, aber einen logischen Fehler in den Geschäftsregeln übersehen. Daher sollte die Testabdeckung von JavaScript immer im Zusammenhang mit der Qualität der Tests selbst betrachtet werden.

\n\n

Die wichtigsten Metriken der Codeabdeckung

\n\n

Bevor wir ein Tool auswählen, schauen wir uns an, welche Metriken es gibt. Codeabdeckungsmetriken werden in verschiedene Typen unterteilt, und jeder beantwortet eine eigene Frage.

\n\n

Zeilenabdeckung (Line Coverage)

\n

Die einfachste Metrik. Sie zeigt, wie viele Zeilen des Quellcodes mindestens einmal ausgeführt wurden. Wenn Sie 100 Zeilen haben und die Tests 80 ausführen, beträgt die Zeilenabdeckung 80%.

\n\n

Verzweigungsabdeckung (Branch Coverage)

\n

Eine tiefere Metrik. Sie analysiert alle möglichen Ausführungspfade des Codes (if/else-Zweige, ternäre Operatoren, switch). Wenn Sie zum Beispiel eine Bedingung if (a > 5) haben, gibt es zwei Zweige: true und false. Wenn Ihr Test nur den Fall prüft, in dem a > 5 ist, beträgt die Verzweigungsabdeckung 50%.

\n\n

Funktionsabdeckung (Function Coverage)

\n

Zeigt an, wie viele Funktionen (oder Methoden) während der Tests aufgerufen wurden. Wenn eine Funktion deklariert, aber nie aufgerufen wird, ist sie nicht abgedeckt.

\n\n

Anweisungsabdeckung (Statement Coverage)

\n

Ähnlich der Zeilenabdeckung, arbeitet aber nicht mit Zeilen, sondern mit einzelnen Anweisungen (Ausdrücken). In JavaScript überschneiden sich diese Konzepte oft, formal sind sie jedoch unterschiedlich.

\n\n

Für reale Projekte umfasst die JS-Abdeckungsanalyse in der Regel alle vier Metriken. Das Hauptaugenmerk sollte jedoch auf der Verzweigungsabdeckung liegen, da sie übersehene Szenarien aufdeckt.

\n\n

Tools zur Messung der Abdeckung in JavaScript

\n\n

Glücklicherweise ist das JavaScript-Ökosystem reich an Tools. Wir betrachten die beliebtesten: von einfachen bis hin zu fortgeschrittenen.

\n\n

Istanbul (nyc) – der Goldstandard

\n

Istanbul ist das beliebteste Tool zur Messung der Codeabdeckung durch Tests in JavaScript. Es funktioniert mit praktisch jedem Test-Runner: Jest, Mocha, Ava, Cypress. Nach der Installation starten Sie die Tests einfach mit dem Wrapper nyc.

\n\n

Beispiel für Installation und Start:

Blogs

Buchempfehlungen