Bei der Arbeit haben wir gerade mit einer stark auf Javascript basierenden Anwendung begonnen (tatsächlich mit Coffeescript, aber immer noch), von der ich ein automatisiertes Testsystem mit JsTestDriver und Fabric implementiert habe.
Wir haben noch nie etwas mit so viel Javascript geschrieben, also haben wir bis jetzt noch nie Javascript getestet. Ich bin mir nicht sicher, was genau wir in unseren Unit-Tests testen sollen. Wir haben JQuery-Plugins für verschiedene Dinge geschrieben, daher ist es ziemlich offensichtlich, dass sie mit JsTestDriver so weit wie möglich auf ihre Richtigkeit überprüft werden sollten. Alle anderen in meinem Team sind jedoch der Meinung, dass wir auch Javascript auf Seitenebene testen sollten.
Ich denke nicht, dass wir Javascript auf Seitenebene als Unit-Tests testen sollten, sondern stattdessen ein System wie Selenium verwenden, um zu überprüfen, ob alles wie erwartet funktioniert. Mein Hauptgrund dafür ist, dass Javascript-Tests auf Seitenebene derzeit über JsTestDriver garantiert fehlschlagen, da sie versuchen, auf Elemente im DOM zuzugreifen, die möglicherweise nicht vorhanden sind.
Also, was sollte in Javascript Unit-getestet werden?
quelle
Antworten:
Testen Sie alles, was Sie können.
Reine Logik kann einfach getestet werden.
Wenn Ihr Code mit dem DOM oder dem Netzwerk interagiert, ist es viel schwieriger.
Wenn Sie einen Code abstrahieren können, um an einem beliebigen DOM-Element statt an einem bestimmten zu arbeiten, können Sie ihn einfacher testen. (Lassen Sie das Element an einem Parameter arbeiten).
Code, der Ajax verwendet, kann getestet werden, indem einfach die Rückruffunktion mit festen Daten aufgerufen wird. Ich habe einige Tests gehabt, bei denen ich
$.ajax
mit meiner eigenen Funktion überschrieben habe. Stellen Sie einfach sicher, dass Sie den echten zurücklegen, wenn Sie fertig sind!Sie werden feststellen, dass "Javascript auf Seitenebene" in Wirklichkeit "eng gekoppelter Code" bedeutet. Wenn Sie die Teile des Codes entkoppeln, können Sie sie unabhängig testen.
(Selen ist kein Unit-Test-Tool. Es eignet sich hervorragend für Szenarien auf hoher Ebene, aber Sie können keine Probefahrten damit durchführen, und es funktioniert nicht in einer isolierten Umgebung.)
quelle
$(document).ready(...)
....
. :-) Ich denke, Sie sollten in der Lage sein, dies auf eine einzige benannte Funktion zurückzuführen, die auch getestet wird. Dann ist Ihr ungetesteter Code eine einzelne Zeile. (Nun, das ist ein Ziel, nicht vorgegeben. In der Praxis hatte ich immer mehr als eine Zeile ungetesteten Codes.)Testalgorithmen. Teile, die eng mit der Benutzeroberfläche zusammenhängen, sind stärker vom jeweiligen Browser abhängig und müssen daher mit selenähnlichen Tools getestet werden.
Ihr Code muss natürlich Algorithmen als isolierte Codeteile enthalten, wenn dies nicht der Fall ist, ist ein Komponententest fast unmöglich.
jquery-plugins sind übrigens nicht einfach auf einheiten zu testen.
quelle
Ich habe früher mit Java gearbeitet und nach dem, was ich sehe, ist das Testen von Java einfacher als das Testen von JavaScript, da Java starrer ist.
Ich bin davon überzeugt, dass die testgetriebene Entwicklung das Beste ist, und daher untersuche ich auch, wie man JavaScript in einem Stück testet. In Java habe ich den Code, der die Verbindung zur Datenbank hergestellt hat, und die Datenzugriffsobjekte verspottet, und ich vergleiche diesen mit dem Code in JavaScript, der das DOM ändert, und dem Code, der AJAX-Aufrufe an den Server ausführt.
Worauf ich hinaus will, ist, dass es mir so scheint, als ob die Logik explizit getestet werden sollte. Sie möchten beispielsweise keinen AJAX-Aufruf tätigen, wenn Sie Komponententests ausführen, weil (a) der Server ausgeführt werden muss und (b) er langsam ist und eine der Richtlinien für Komponententests lautet, dass er ausgeführt werden muss superschnell, damit die Entwickler es nicht vermeiden, sie wie jede Minute laufen zu lassen.
Eine weitere Richtlinie für den kontinuierlichen Integrationsprozess ist das Senden einer E-Mail mit dem Hinweis, dass ein fehlgeschlagener Komponententest gefunden wurde.
quelle