Ich hatte die gleichen Fragen vor ein paar Monaten und, nachdem ich mit vielen Entwicklern gesprochen und viel Forschung getan habe, ist das, was ich herausgefunden habe. Sie sollten Unit-Test Ihr JavaScript, schreiben Sie eine kleine Reihe von UI-Integrationstests und vermeiden Sie Record und Playback-Test-Tools. Lassen Sie mich das genauer erklären.
Betrachten Sie zuerst die test pyramid. Dies ist eine interessante Analogie von Mike Cohn erstellt, die Ihnen helfen wird zu entscheiden, welche Art von Tests Sie tun sollten. Am unteren Ende der Pyramide befinden sich die Komponententests, die solide sind und schnelle Rückmeldungen liefern. Diese sollten die Grundlage Ihrer Teststrategie bilden und somit den größten Teil der Pyramide einnehmen. Oben haben Sie die UI-Tests. Das sind die Tests, die direkt mit Ihrer Benutzeroberfläche interagieren, wie Selenium zum Beispiel. Obwohl diese Tests Ihnen helfen können, Fehler zu finden, sind sie teurer und liefern sehr langsames Feedback. Je nachdem, welches Werkzeug Sie verwenden, werden sie auch sehr brüchig und Sie werden mehr Zeit für die Pflege dieser Tests aufwenden, als den tatsächlichen Produktionscode zu schreiben. Die Service-Schicht in der Mitte enthält Integrationstests, für die keine Benutzeroberfläche erforderlich ist. In Rails zum Beispiel würden Sie Ihre REST-Schnittstelle direkt testen, anstatt mit den DOM-Elementen zu interagieren.
Nun zurück zu Ihrer Frage. Ich fand heraus, dass ich die Anzahl der Bugs in meinem Projekt erheblich reduzieren konnte, das ist eine Web-Anwendung, die in Spring Roo (Java) mit Tonnen von JavaScript geschrieben wurde, einfach indem ich genug Komponententests für JS schrieb. In meiner Anwendung ist viel Logik in JS geschrieben und das ist die Art von Dingen, die ich hier teste. Ich bin nicht besorgt darüber, wie die Seite tatsächlich aussehen wird oder ob die Animationen so abgespielt werden, wie sie sollten. Ich teste, ob die Module, die ich in JS schreibe, die erwartete Logik ausführen, ob Elementklassen korrekt zugewiesen sind und ob Fehlerbedingungen gut gehandhabt werden. Für diese Tests verwende ich Jasmine. Dies ist ein großartiges Werkzeug. Es ist sehr einfach zu lernen und hat nette Spottfähigkeiten, die Spione genannt werden. Jasmine-jQuery fügt mehr großartige Funktionalität hinzu, wenn Sie jQuery verwenden. Insbesondere können Sie Fixtures angeben, bei denen es sich um Snippets des HTML-Codes handelt, sodass Sie das DOM nicht manuell vortäuschen müssen. Ich habe dieses Tool in Maven integriert und diese Tests sind Teil meiner CI-Strategie.
Sie müssen vorsichtig mit UI-Tests sein, besonders wenn Sie sich auf Aufnahme/Wiedergabe-Tools wie Selenium verlassen. Da sich die Benutzeroberfläche häufig ändert, werden diese Tests immer wieder unterbrochen und Sie werden viel Zeit darauf verwenden, herauszufinden, ob die Tests wirklich fehlgeschlagen sind oder ob sie gerade veraltet sind. Außerdem fügen sie nicht so viel Wert hinzu wie Unit Tests. Da sie eine integrierte Umgebung benötigen, um sie auszuführen, werden Sie diese meist erst nach Abschluss der Entwicklung verwenden, wenn die Kosten für die Fehlerbehebung höher sind.
Für Rauch/Regressionstests sind UI-Tests jedoch sehr nützlich. Wenn Sie diese automatisieren müssen, sollten Sie auf einige Gefahren achten. Schreiben Sie Ihre Tests, notieren Sie sie nicht. Aufgezeichnete Tests basieren normalerweise auf automatisch generierten XPaths, die für jede kleine Änderung, die Sie an Ihrem Code vornehmen, unterbrochen werden. Ich glaube, Gurke ist ein guter Rahmen für das Schreiben dieser Tests und Sie können es zusammen mit WebDriver verwenden, um die Browser-Interaktion zu automatisieren. Code, der über Tests denkt. In UI-Tests müssen Sie Elemente leichter finden, damit Sie nicht auf komplexe XPaths angewiesen sind. Hinzufügen von Klassen- und ID-Elementen, wo Sie normalerweise nicht sind, wird häufig vorkommen. Schreiben Sie keine Tests für jede kleine Ecke. Diese Tests sind teuer zu schreiben und zu lange dauern. Sie sollten sich auf die Fälle konzentrieren, die die meisten Ihrer Funktionen untersuchen. Wenn Sie auf dieser Ebene zu viele Tests schreiben, werden Sie vermutlich die gleiche Funktionalität testen, die Sie zuvor bei Ihren Komponententests getestet haben (vorausgesetzt, Sie haben sie geschrieben).
In meinem aktuellen Projekt verwende ich Spock und Geb, um die UI-Tests zu schreiben. Ich finde diese Werkzeuge erstaunlich. Sie sind in Groovy geschrieben, was besser zu meinem Java-Projekt passt.
Sie können einige wirklich gute Ratschläge aus dem Buch [Kontinuierliche Tests: mit Ruby, Rails und JavaScript] (http://www.amazon.com/Continuous-Testing-Ruby-Rails-JavaScript/dp/1934356700) erhalten . Ich habe dieses Buch vor ungefähr 6-8 Monaten gelesen und hatte viele gute Sachen darüber, wie man Jasmin mit Knoten benutzt, um einen Browser zu verspotten. Leider hatte ich keine Chance, es in die Praxis umzusetzen. – Augusto
Interessante müssen vielleicht bekommen, danke :) –