Winkelmesser - Konzepte des Javascript-Testens

Da die Kenntnisse von JavaScript für die Arbeit mit Protractor unerlässlich sind, möchten wir in diesem Kapitel die Konzepte des JavaScript-Testens im Detail verstehen.

JavaScript-Test und Automatisierung

JavaScript ist die beliebteste dynamisch typisierte und interpretierte Skriptsprache. Die schwierigste Aufgabe besteht jedoch darin, den Code zu testen. Dies liegt daran, dass es im Gegensatz zu anderen kompilierten Sprachen wie JAVA und C ++ keine Kompilierungsschritte in JavaScript gibt, die dem Tester helfen können, Fehler herauszufinden. Außerdem ist das browserbasierte Testen sehr zeitaufwändig. Daher sind Tools erforderlich, die automatisierte Tests für JavaScript unterstützen.

Konzepte des automatisierten Testens

Es ist immer eine gute Praxis, den Test zu schreiben, da dadurch der Code besser wird. Das Problem beim manuellen Testen ist, dass es etwas zeitaufwändig und fehleranfällig ist. Der Prozess des manuellen Testens ist auch für Programmierer ziemlich langweilig, da sie den Prozess wiederholen, Testspezifikationen schreiben, den Code ändern und den Browser mehrmals aktualisieren müssen. Außerdem verlangsamt manuelles Testen den Entwicklungsprozess.

Aus den oben genannten Gründen ist es immer nützlich, einige Tools zu haben, die diese Tests automatisieren und Programmierern helfen können, diese sich wiederholenden und langweiligen Schritte loszuwerden. Was sollte ein Entwickler tun, um den Testprozess zu automatisieren?

Grundsätzlich kann ein Entwickler den Tool-Set in der CLI (Command Line Interpreter) oder in der Entwicklungs-IDE (Integrated Development Environment) implementieren. Diese Tests werden dann auch ohne die Eingabe des Entwicklers kontinuierlich in einem separaten Prozess ausgeführt. Das automatisierte Testen von JavaScript ist ebenfalls nicht neu und es wurden viele Tools wie Karma, Winkelmesser, CasperJS usw. entwickelt.

Testarten für JavaScript

Es kann verschiedene Tests für verschiedene Zwecke geben. Beispielsweise werden einige Tests geschrieben, um das Verhalten von Funktionen in einem Programm zu überprüfen, während andere geschrieben werden, um den Fluss eines Moduls oder einer Funktion zu testen. Wir haben also die folgenden zwei Arten von Tests:

Unit Testing

Der Test wird auf dem kleinsten testbaren Teil des Programms durchgeführt, der als Einheit bezeichnet wird. Das Gerät wird grundsätzlich isoliert getestet, ohne dass dieses Gerät von den anderen Teilen abhängig ist. Im Fall von JavaScript kann die einzelne Methode oder Funktion mit einem bestimmten Verhalten eine Codeeinheit sein, und diese Codeeinheiten müssen isoliert getestet werden.

Einer der Vorteile des Komponententests besteht darin, dass das Testen von Einheiten in beliebiger Reihenfolge durchgeführt werden kann, da die Einheiten unabhängig voneinander sind. Ein weiterer Vorteil von Unit-Tests, der wirklich zählt, besteht darin, dass der Test jederzeit wie folgt ausgeführt werden kann:

  • Von Anfang an im Entwicklungsprozess.
  • Nach Abschluss der Entwicklung eines Moduls / einer Funktion.
  • Nach dem Ändern eines Moduls / einer Funktion.
  • Nach dem Hinzufügen einer neuen Funktion in der vorhandenen Anwendung.

Für den automatisierten Unit-Test von JavaScript-Anwendungen können wir aus vielen Testtools und Frameworks wie Mocha, Jasmine und QUnit auswählen.

End-to-End-Tests

Es kann als die Testmethode definiert werden, die verwendet wird, um zu testen, ob der Fluss der Anwendung von Anfang bis Ende (von einem Ende zum anderen Ende) gemäß dem Entwurf einwandfrei funktioniert.

End-to-End-Tests werden auch als Funktions- / Flusstests bezeichnet. Im Gegensatz zu Unit-Tests testen End-to-End-Tests, wie einzelne Komponenten als Anwendung zusammenarbeiten. Dies ist der Hauptunterschied zwischen Unit-Tests und End-to-End-Tests.

Angenommen, wir haben ein Registrierungsmodul, in dem der Benutzer gültige Informationen angeben muss, um die Registrierung abzuschließen. Der E2E-Test für dieses bestimmte Modul führt die folgenden Schritte aus, um den Test abzuschließen:

  • Zunächst wird das Formular oder Modul geladen / kompiliert.
  • Jetzt wird das DOM (Document Object Model) der Elemente des Formulars abgerufen.
  • Lösen Sie als Nächstes das Klickereignis der Schaltfläche "Senden" aus, um zu überprüfen, ob es funktioniert oder nicht.
  • Sammeln Sie jetzt zu Validierungszwecken den Wert aus den Eingabefeldern.
  • Als nächstes sollten die Eingabefelder validiert werden.
  • Rufen Sie zu Testzwecken eine gefälschte API auf, um die Daten zu speichern.

Jeder Schritt liefert seine eigenen Ergebnisse, die mit der erwarteten Ergebnismenge verglichen werden.

Nun stellt sich die Frage, warum diese Art von E2E- oder Funktionstests auch manuell durchgeführt werden kann, warum wir dafür eine Automatisierung benötigen. Der Hauptgrund ist, dass die Automatisierung diesen Testprozess vereinfacht. Einige der verfügbaren Tools, die für diesen Zweck problemlos in jede Anwendung integriert werden können, sind Selen, PhantomJS und Protractor.

Testen von Tools und Frameworks

Wir haben verschiedene Testwerkzeuge und Frameworks für Angular-Tests. Im Folgenden sind einige der bekanntesten Tools und Frameworks aufgeführt:

Karma

Karma, erstellt von Vojta Jina, ist ein Testläufer. Ursprünglich hieß dieses Projekt Testacular. Es ist kein Testframework, was bedeutet, dass wir JavaScript-Komponententests einfach und automatisch in echten Browsern ausführen können. Karma wurde für AngularJS entwickelt, da es vor Karma kein automatisiertes Testtool für webbasierte JavaScript-Entwickler gab. Auf der anderen Seite können Entwickler mit der von Karma bereitgestellten Automatisierung einen einfachen Befehl ausführen und feststellen, ob eine gesamte Testsuite bestanden wurde oder nicht.

Vorteile der Verwendung von Karma

Im Folgenden sind einige Vorteile der Verwendung von Karma im Vergleich zum manuellen Prozess aufgeführt:

  • Automatisiert Tests in mehreren Browsern und Geräten.
  • Überwacht Dateien auf Fehler und behebt sie.
  • Bietet Online-Support und Dokumentation.
  • Erleichtert die Integration mit einem Continuous Integration Server.

Nachteile der Verwendung von Karma

Das Folgende sind einige Nachteile der Verwendung von Karma -

Der Hauptnachteil der Verwendung von Karma besteht darin, dass für die Konfiguration und Wartung ein zusätzliches Tool erforderlich ist.

Wenn Sie Karma-Testläufer mit Jasmine verwenden, steht weniger Dokumentation zur Verfügung, um Informationen zum Einrichten Ihres CSS zu finden, wenn mehrere IDs für ein Element vorhanden sind.

Jasmin

Jasmine, ein verhaltensgesteuertes Entwicklungsframework zum Testen von JavaScript-Code, wird bei Pivotal Labs entwickelt. Vor der aktiven Entwicklung des Jasmine-Frameworks wurde von Pivotal Labs ein ähnliches Unit-Test-Framework namens JsUnit entwickelt, das über einen eingebauten Testläufer verfügt. Die Browsertests können durch Jasmine-Tests ausgeführt werden, indem die Datei SpecRunner.html eingeschlossen oder auch als Befehlszeilentestläufer verwendet wird. Es kann auch mit oder ohne Karma verwendet werden.

Vorteile der Verwendung von Jasmin

Das Folgende sind einige Vorteile der Verwendung von Jasmin -

  • Ein Framework unabhängig von Browser, Plattform und Sprache.

  • Unterstützt testgetriebene Entwicklung (TDD) zusammen mit verhaltensgetriebener Entwicklung.

  • Hat Standardintegration mit Karma.

  • Leicht verständliche Syntax.

  • Bietet Testspione, Fälschungen und Durchgangsfunktionen, die beim Testen als zusätzliche Funktionen helfen.

Nachteile der Verwendung von Jasmin

Das Folgende ist ein Nachteil der Verwendung von Jasmin -

  • Die Tests müssen vom Benutzer zurückgegeben werden, wenn sie sich ändern, da in Jasmine während der Ausführung des Tests keine Dateiüberwachungsfunktion verfügbar ist.

Mokka

Mocha, geschrieben für Node.js-Anwendungen, ist ein Testframework, unterstützt aber auch Browsertests. Es ist ganz wie bei Jasmine, aber der Hauptunterschied zwischen ihnen besteht darin, dass Mocha ein Plugin und eine Bibliothek benötigt, da es nicht als Testframework eigenständig ausgeführt werden kann. Auf der anderen Seite ist Jasmine eigenständig. Mokka ist jedoch flexibler zu verwenden als Jasmin.

Vorteile der Verwendung von Mokka

Im Folgenden sind einige Vorteile der Verwendung von Mokka aufgeführt:

  • Mokka ist sehr einfach zu installieren und zu konfigurieren.
  • Benutzerfreundliche und einfache Dokumentation.
  • Enthält Plugins mit mehreren Knotenprojekten.

Nachteile der Verwendung von Mokka

Das Folgende sind einige Nachteile der Verwendung von Mokka -

  • Es benötigt separate Module für Behauptungen, Spione usw.
  • Für die Verwendung mit Karma ist außerdem eine zusätzliche Konfiguration erforderlich.

QUnit

QUint wurde ursprünglich 2008 von John Resig als Teil von jQuery entwickelt und ist eine leistungsstarke und dennoch benutzerfreundliche JavaScript-Unit-Test-Suite. Es kann verwendet werden, um jeden generischen JavaScript-Code zu testen. Obwohl es sich auf das Testen von JavaScript im Browser konzentriert, ist es für den Entwickler sehr bequem zu verwenden.

Vorteile der Verwendung von QUnit

Im Folgenden sind einige Vorteile der Verwendung von QUnit aufgeführt:

  • Einfach zu installieren und zu konfigurieren.
  • Benutzerfreundliche und einfache Dokumentation.

Nachteile der Verwendung von QUnit

Das Folgende ist ein Nachteil der Verwendung von QUnit -

  • Es wurde hauptsächlich für jQuery entwickelt und ist daher nicht so gut für die Verwendung mit anderen Frameworks geeignet.

Selen

Selen, ursprünglich von Jason Huggins im Jahr 2004 als internes Tool bei ThoughtWorks entwickelt, ist ein Open-Source-Testautomatisierungstool. Selenium definiert sich selbst als „Selenium automatisiert Browser. Das ist es!". Durch die Automatisierung von Browsern können die Entwickler sehr einfach mit den Browsern interagieren.

Vorteile der Verwendung von Selen

Im Folgenden sind einige Vorteile der Verwendung von Selen aufgeführt:

  • Enthält einen großen Funktionsumfang.
  • Unterstützt verteilte Tests.
  • Hat SaaS-Unterstützung durch Dienste wie Sauce Labs.
  • Einfache Verwendung mit einfachen Dokumentationen und umfangreichen Ressourcen.

Nachteile der Verwendung von Selen

Das Folgende sind einige Nachteile der Verwendung von Selen -

  • Ein Hauptnachteil der Verwendung von Selen besteht darin, dass es als separater Prozess ausgeführt werden muss.
  • Die Konfiguration ist etwas umständlich, da der Entwickler mehrere Schritte ausführen muss.