JavaScript: Unit-Testing

Setup und Teardown

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Kein Entwickler mag doppelten Code. Wieso sollten Sie ihn also in Ihren Unit Tests tolerieren? Glücklicherweise müssen Sie das auch nicht: Nutzen Sie statt dessen einfach die Setup- und Teardown-Funktionen BeforeEach und AfterEach.
05:43

Transkript

Ein Blick auf die folgenden beiden Jasmine Tests zeigt, dass wir hier eine wiederholende Zeile haben. Beim test sehen wir, dass ein Konto initialisiert wird, und beides mal die gleichen InitialisierungsdDaten genutzt werden. Wir haben hier also einen doppelten Code in meinen Funktionen und doppelten Code versuchen wir als Entwickler ja in der Regel der zu vermeiden. Unter Jasmine können wir dies erledigen, indem wir eine sogenannte Setup Funktion benutzen. Setup und Tear down, das sind bekannte Konzepte, wie wir sie auch von anderen Testframeworks kennen und unter Jasmine heißt die Setup Funktion "before each" und die Tear down-Funktion heißt "after each", bedeutet also wenn ich in dem Fall hier die Duplizierung dieser Code-Zeile vermeiden möchte, dann schreibe ich eine Funktion, die ich in die "before each"- Funktion einbinde. Ich schreibe also "before each", das ist eine Funktion die von Jasmine kommt, und übergebe eine anonyme Funktion. Und in diese anonyme Funktion kann ich nun meinen Initialisierungscode hineinschreiben. Zum Beispiel kann ich hier, mir diese Zeile nehmen und entferne sie hier und füge sie oben wieder ein. Ich nehme das hier jetzt auch raus und wenn ich meinen Test jetzt laufen lasse dann schlägt der fehl, was daran liegt, dass Konto innerhalb von dieser Funktion hier deklariert ist und hier unten nicht mehr sichtbar ist. Wie kann ich das ganze vermeiden? Ich kann das Konto über die "before each" und alle weiteren Specs teilen, indem ich es mit "this" qualifiziere, (inaudible) "this.konto" und dann hier unten, auch "this" benutze, das schauen wir uns gleich einmal an oder alternativ kann ich auf Ebene der Test Suite die Variable Konto deklarieren. Dann wird diese Variable hier vor jedem Test initialisiert. und in den Tests dann genutzt. Ich speichere das Ganze einmal, mein Test läuft automatisch und wie wir hier unten sehen, sind beide Tests erfolgreich durchgelaufen Was also geschieht ist, dass zunächst diese Funktion läuft. Dann diese hier, bevor diese Funktion ausgeführt werden, wird aber jeweils der Code in der Methode "before each" (inaudible) Code aufgerufen. Wenn ich Code zum Aufräumen hätte, dann würde ich den in einer "after each" Funktion schreiben. Und hier würde ich dann aufräumen. In unserem Fall haben wir das nicht, stattdessen haben wir nur einmal das "before each" und wie gesagt ich könnte das Konto auch verfügbar machen indem ich es mit "this" qualifiziere. Und dann muss ich hier das Ganze aber auch mit "this" qualifizieren. Und hier auch denn nur dann mal sehen wir wenn ich das Ganze einmal jetzt starte wird das Konto auch gefunden. Im zweiten Fall habe ich das Konto nicht mit "this" qualifiziert, das war die Auszahlungspezifikation. Und im Fall der Auszahlungspezifikation ist der Test fehlgeschlagen. Also behebe ich das, indem ich das auch hier mit "this" qualifiziere. Und schon funktionieren auch die Tests. Bedeutet also, wenn wir Code haben, die über mehrere Testfälle hinweg dupliziert wird, dann können wir diesen Code über eine" beforeeach" Funktion global verfügbar machen. Dabei müssen allerdings darauf achten, dass wir Variablen die wir hier initialisieren, wahlweise zunächst global deklarieren oder aber falls wir das nicht möchten, dass wir diese Variablen mit "this" qualifizieren. Wenn Sie nun sagen, nun ja in den zwei Testfällen hier hatte ich vielleicht jeweils immer das gleiche Konto, aber ich habe andere Testfälle in denen mein Konto anders initialisiert wird, dann können Sie dies übrigens sehr schön lösen indem sie ihre Suites ineinander schachteln. Wenn wir also davon ausgehen, wir haben einmal ein Konto, was mit 100 € initialisiert wird, was für mehrere Testfälle genutzt wird Und eins, dass dann zum Beispiel nur mit 10 € initialisiert wird, dann könnte ich das Ganze wie folgt erledigen: Ich schreibe mir hier eine weitere geschachtelte "describe"-Funktion, nenne das Ganze diesmal Sparkonto auch mit 100 Startguthaben... Und das Ganze wird hier unten geschlossen. Und den Fall, dass ich dann den anderen Testfall habe indem wir ein Konto mit geringerem Startguthaben haben, dann kopiere ich mir einfach mal diesen Bereich hier. Und füge das Ganze ich unten drunter als weitere Spezifikation ein. Und sage diesmal Sparkonto mit 10 € Startguthaben. Und... Passe meine Werte entsprechend an. Und auch das funktioniert, bedeutet also, Sie kann ein Setup über eine "beforeeach" Funktion auch dann benutzen, wenn Sie Ihr Testobjekt in verschiedenen Szenarien testen wollen. Immer dann wenn Sie verschiedene Szenarien haben, benutzen Sie einfach geschachtelte "describe"-Blöcke.

JavaScript: Unit-Testing

Steigen Sie in die Grundlagen des Unit-Testings ein und sehen Sie, wie Sie mit dem Jasmine-Framework Ihren JAvaScript-Code professionell testen können.

2 Std. 7 min (21 Videos)
Derzeit sind keine Feedbacks vorhanden...
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:19.05.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!