Warum TDD kein Modetrend, sondern Ihr neuer bester Freund ist
\n\nStellen Sie sich vor: Sie schreiben Code, alles funktioniert perfekt. Sie starten die Anwendung – keine Bugs. Eine Woche später fügen Sie eine neue Funktion hinzu, und... alles geht kaputt. Kommt Ihnen das bekannt vor? Wenn Sie schon einmal Stunden mit der Suche nach einem Fehler verbracht haben, der durch eine zufällige Änderung in einem benachbarten Modul entstanden ist – dann ist dieser Artikel für Sie.
\n\nTest-Driven Development (TDD) ist nicht nur eine Methodik, sondern ein echter Rettungsanker für Entwickler. In der Welt von JavaScript, wo sich Code schneller ändert als das Wetter, hilft TDD, über Wasser zu bleiben. Lassen Sie uns verstehen, wie das funktioniert und warum Sie nach TDD nicht mehr auf die alte Weise coden können.
\n\nWas TDD wirklich ist (Spoiler: Es geht nicht um Tests)
\n\nViele denken, TDD sei einfach "Tests vor dem Code schreiben". Aber in Wirklichkeit ist es eine Designphilosophie. TDD zwingt Sie dazu, darüber nachzudenken, wie Ihr Code verwendet wird, bevor Sie ihn schreiben. Es ist wie ein Architekt, der zuerst den Bauplan zeichnet und dann mit dem Bauen beginnt.
\n\nDer TDD-Zyklus besteht aus drei Schritten (oft als "Red-Green-Refactor" bezeichnet):
\n\n- \n
- Red: Schreiben Sie einen Test, der garantiert fehlschlägt (weil die Funktionalität noch nicht existiert). \n
- Green: Schreiben Sie den minimalen Code, damit der Test besteht. \n
- Refactor: Verbessern Sie den Code, ohne sein Verhalten zu ändern (die Tests garantieren, dass Sie nichts kaputt gemacht haben). \n
Und ja, dieser Zyklus wird für jede kleine Einheit der Funktionalität wiederholt. Klingt nach einer Verlangsamung? Vielleicht. Aber auf lange Sicht sparen Sie Stunden beim Debuggen.
\n\nWarum JavaScript ideal für TDD ist
\n\nJavaScript ist eine dynamische Sprache. Das ist seine Stärke und Schwäche. Laufzeitfehler sind an der Tagesordnung, besonders in großen Projekten. TDD verwandelt JavaScript von einem "flexiblen, aber zerbrechlichen" Werkzeug in eine zuverlässige Plattform.
\n\nAußerdem ist das JS-Ökosystem reich an Testwerkzeugen: Jest, Mocha, Chai, Jasmine. Wir werden Jest verwenden – es ist einfach, leistungsstark und beliebt. Wenn Sie Jest noch nicht kennen, keine Sorge: Wir beginnen mit den Grundlagen.
\n\nPraxis: Einen Taschenrechner mit TDD schreiben
\n\nTheorie ist gut, aber lassen Sie uns zu echtem Code übergehen. Wir schreiben einen einfachen Taschenrechner mit TDD. Das ist ein klassisches Beispiel, zeigt aber den Prozess hervorragend.
\n\nSchritt 1: Projekt einrichten
\n\nErstellen Sie einen neuen Ordner und initialisieren Sie das Projekt:
\n\nmkdir tdd-calculator\ncd tdd-calculator\nnpm init -y\nnpm install --save-dev jest\n\n\nFügen Sie ein Skript in package.json hinzu:
"scripts": {\n "test": "jest"\n}\n\n\nSchritt 2: Rot – Test für Addition schreiben
\n\nErstellen Sie die Datei calculator.test.js:
// calculator.test.js\nconst { add } = require('./calculator');\n\ndescribe('Calculator', () => {\n test('adds 2 + 3 to equal 5', () => {\n expect(add(2, 3)).toBe(5);\n });\n});\n\n\nFühren Sie den Test aus: npm test. Er wird mit einem Fehler fehlschlagen, weil die Funktion add nicht existiert. Das ist normal – das ist die rote Phase.
Schritt 3: Grün – Minimalen Code schreiben
\n\nErstellen Sie calculator.js:
// calculator.js\nfunction add(a, b) {\n return a + b;\n}\n\nmodule.exports = { add };\n\n\nFühren Sie den Test erneut aus. Grün? Ausgezeichnet! Wir haben gerade die grüne Phase durchlaufen.
\n\nSchritt 4: Refactoring
\n\nDer Code ist einfach, es gibt nichts zu refaktorisieren. Aber stellen Sie sich vor, wir möchten eine Typprüfung hinzufügen. TDD ermöglicht dies sicher: zuerst der Test, dann der Code.
\n\n// calculator.test.js\ntest('throws error if arguments are not numbers', () => {\n expect(() => add('2', 3)).toThrow('Arguments must be numbers');\n});\n\n\nJetzt modifizieren wir add: