Frage

Mein Haupt JavaScript-Framework ist jQuery so würde ich meinen Unit-Test mag und spöttischen Frameworks damit kompatibel zu sein. Ich möchte lieber nicht einen anderen JavaScript-Framework einführen müssen.

Ich bin derzeit mit QUnit für Unit-Tests und Jack spöttisch, aber ich bin auf die gesamte Einheit Testen von JavaScript ziemlich neu.

Hat jemand ein besseres Werkzeug vorschlagen? Was hat sich für Sie gearbeitet?

War es hilfreich?

Lösung

QUnit
jQUnit
Schreiben JS-Tests mit QUnit und jQUnit

QUnit ist die Einheit Test-Framework für die jQuery JavaScript-Framework. Die Test-Framework selbst verwendet die jQuery-Bibliothek, aber die Tests können für jede JavaScript geschrieben werden und erfordern nicht den Code jQuery zu verwenden. JQUnit ist eine modifizierte Version von QUnit, die im Setup, Teardown fügt hinzu und Funktionen behaupten, die eher typisch für einen xUnit Rahmen sind, und kapselt alles in einer globalen Variablen.

Die visuelle Schnittstelle der testrunner Seite ist schön, so dass Sie einen Drilldown und sehen jeweils in jedem Testverfahren geltend zu machen. Schreiben von Tests ist ziemlich einfach, und Sie können den Testcode direkt auf der testrunner Seite [8] laufen. Dies ermöglicht eine einfache und sichtbare DOM-Tests.

QUnit: MIT oder GPL (wählen) jQUnit: MIT Lizenz

Pros
  - Asynchronous Unterstützung
  - Gut für DOM-Tests
  - Tests laufen nacheinander immer in der Reihenfolge, wie sie zu einer Suite
hinzugefügt werden   - Debug auf der Testseite mit Firebug
  - Syntax ist ähnlich wie JUnit, wenn JQUnit verwenden, aber einfach zu erlernen, wenn QUnit
mit Cons
  - Automatisierung wäre schwierig umzusetzen

Andere Tipps

Ich denke, dass Jack die beste Mockframework für JavaScript ab dem Zeitpunkt des Schreibens dieses Artikels ist. Der Hauptgrund ist, dass das, was für JavaScript richtig ist nicht wahrscheinlich, was für eine stark typisierte Sprache wie Java richtig ist.

Viele JavaScript spöttischen Frameworks werden von Java Mock Frameworks (wie das ausgezeichnete JsMockito, zum Beispiel) inspiriert. Aber das Problem mit dieser ist, dass sie erforderlich Dependency Injection, denn das ist so ziemlich der einzige vernünftige Weg in Java zu verwenden, spöttisch. Aber in JavaScript, gibt es viele Möglichkeiten, spöttisch zu verwenden, und Sie sind nicht gezwungen in Abhängigkeit mit Injektion überall.

Zum Beispiel mit JsMockito, haben Sie Mocks zu machen und dann passieren diese Mocks in Ihre Software-under-Test (SUT). Der SUT muss direkt die Mocks nennen. Daher sind Sie die SUT als Konstrukteur oder Funktion zu codieren gezwungen, die als Parameter in allen seinen Abhängigkeiten nimmt. (Manchmal ist das eine feine Weise, es zu implementieren, aber nicht in jedem Fall. Der Schwanz wedelt mit dem Hund, wenn Ihr Mockframework Design Kräfte Implementierungsansatz).

In JavaScript ist es sehr einfach zu „kapern“ jede Funktion. Deshalb gibt es jede Menge Möglichkeiten, etwas so zu bauen, dass Sie Teile davon ohne seine Abhängigkeiten explizit Injektion in sie verspotten. Zum Beispiel Jack können Sie verspotten jeder Funktion, ob sie öffentlich oder auf einem lokalen Objekt ist. Von dort können Sie auf sie auszuspionieren, Stummel es oder Erwartungen an sie auszudrücken. Der entscheidende Punkt ist dieser: , wenn Sie eine Funktion verspottet haben, werden alle Anrufe an diese ursprüngliche Funktion stattdessen auf Ihre Mock gerichtet werden . Mit anderen Worten, werden nach wie vor Ihre Mocks gewöhnen, auch wenn die ursprüngliche, un-verspottete Funktion aufgerufen wurde. Als Ergebnis sind gezwungen Sie keine Abhängigkeiten zu injizieren, obwohl sicherlich Sie so in diesen Fällen tun können, die für sie anrufen.

JavaScript ist eine andere Sprache als Java (und C #, etc.) Es ermöglicht verschiedene Implementierungs Idiome. Dependency Injection ist nach wie vor ein wertvolles Werkzeug in der Toolbox in JavaScript, aber es ist nicht das einzige Spiel in der Stadt mehr. Ihr Mockframework muss wissen und respektieren, dass Tatsache. Jack und ein paar anderen, sondern von denen, die tun, erscheint Jack die reifste und feature-rich zu sein.

Ich bin mir nicht sicher, warum niemand erwähnt hat JsTestDriver ! Es hat die eine der wenigen JS Testing Tools sein, die wirklich funktionieren, wie man sie erwarten würde, um, wenn Sie Unit-Test-Tools in anderen Sprachen verwendet haben.

Ausführen von Tests können ohne sie zu berühren einen Browser durchgeführt werden, können Sie es mit IDE integrieren, können Sie es mit Continuous Integration-Systeme integrieren können ... Oh, und es ist schnell, und Tests in mehreren Browsern gleichzeitig ausgeführt werden können.

Sie können auch andere Test-Frameworks wie YUITest mit ihm, so dass es sogar noch besser.

YUI Test-
TDD mit YUI Test-

YUI Test ist der Test-Framework für Yahoo User Interface Library. Es wird von Yahoo verwendet eine eigene Bibliothek zu testen und hat jUnit ähnliche Syntax.

Wie JSUnit, YUI-Test kommt mit seiner eigenen Logging-Konsole ausgeben können Informationen, Warnungen und Fehler zusätzlich zu den Ergebnissen der einzelnen Tests.

YUI bietet auch die Möglichkeit href="http://developer.yahoo.com/yui/yuitest/#test-reporting" zum senden über die Ergebnisse in entweder JSON oder XML-Format.

YUI-Test ist lizenzierte BSD-.

Pros
  - Wirklich gute Dokumentation
  - Eine aktive Community
  - Regelmäßige Veröffentlichungen
  - Syntax ist ähnlich wie jUnit (Test-Suiten, behauptet und Setup / Teardown)
  - Asynchronous Unterstützung
  - Gut für DOM-Tests
  - Tests immer sequenziell in der Reihenfolge ausgeführt, sie zu einer Suite hinzugefügt

Cons
  - Automatisierung nicht trivial zu implementieren, aber weniger schwierig als anderer Frameworks

Überprüfen Sie auch http://sinonjs.org/

  

Test spioniert Test-Stubs Mocks Gefälschte Timer Gefälschte XHR Fake-Server Sandbox Assertions

Es funktioniert zusammen mit QUnit und dass ein Plus bisher gewesen ist.

Dies ist eine ziemlich gute Übersicht über Rahmenbedingungen für Javascript spöttisch:

http://testdrivenwebsites.com/2010/05/ 06 / java-script-Mock-Frameworks-Vergleich

Wir haben mit jsspec jsspec . Es ist sehr schön, wenn man so will rspec und BDD. Gerade gesehen, einen Artikel von Justin Gehtland auf sie „ohne Kopf mit "auch.

in JavaScript Für spöttisch zu sehen qMock , ein Rahmen eines Kollegen und ich schrieb unsere Verwendung von QUnit zu ergänzen. Obwohl letzteres für Unit-Tests groß ist, erlaubt es nicht für eine sehr effektive async / Business-Logik-Tests. Wir havn't ‚getaggt‘ jede Freisetzung als stabil, aber es gibt ein paar anständige docs dort, und wenn Sie die SVN-Kasse werden Sie sehen sich Unit-Tests dahinter qmock hat, die ziemlich selbsterklärend sind.

Oh, und Tests als Teil des Build zu automatisieren wir ein einfaches Selen-Skript verwendet, um durch unsere Testsuite (eine Testseite pro JS-Datei) zu navigieren, und ‚hörte‘ für einen Pass oder CSS-Klasse fehlschlagen (hinzugefügt von QUnit) . Dies funktioniert ohne Kopf als auch für IE / FF2 AFAIK

Für mozilla Entwicklung, verliebe ich mich in mit UXU , bezogen auf MozUnit aber immer noch aktiv. Hat nette Features wie Mock-Server oder Schlaf / yeld Methoden.

ich die Schraube Einheit Test-Framework verwenden, und ich habe meinen eigenen spöttische Bibliothek namens jsMocha geschrieben , die in der harten Einsatz in der Firma war ich für mehr als 6 Monate arbeiten.

Ich weiß, dass Sie für JQuery-kompatible Rahmenbedingungen fragen, aber ich möchte werfen script.aculo.us in die Mischung auf Vollständigkeit. Sie haben eine Unit-Test Suite rel="nofollow, die nicht schlecht ist.

Crosscheck schien extrem leistungsfähig, als ich es sah, aber wir haben es nicht in unseren Build-Prozess zu diesem Zeitpunkt eingearbeitet. Es hat den Vorteil, dass sie browserloser und somit auch in einem automatisierten Build-and-Testszenario funktionieren soll.

http://thefrontside.net/crosscheck

Sie könnten versuchen, Htmlunit , die eine vor einem Jahr JQuery kompatible Version über.

Der Vorteil von Htmlunit ist, dass es nicht einen Browser fährt, so dass es schnell.

Der Nachteil ist, dass es nicht einen Browser fährt so gibt es einige JS Dinge, die nicht funktionieren. Aber kompensieren, dass sie die JQuery-Tests laufen, so dass die JS Unterstützung könnte gut genug für das, was Sie brauchen.

JSUnit wird entweder aus dem Browser ausgeführt werden, durch seine Eclipse-Plug-in, oder automatisch durch eine ANT-Task. Sie erstellen eine HTML-Seite mit einem Bündel von Testfunktionen, die mit dem Präfix ‚Test‘ genannt werden müssen, gehören die JS-Datei Sie testen. Wenn jede Assertion in einer Funktion ausfällt, schaltet die gesamte Funktion und beendet die Ausführung. Es gibt keine garantierte Reihenfolge, in der diese Tests ausgeführt werden. Sie können setup() und teardown() Funktionen erstellen.

Lizenz: GPL, GLPL, MPL

Pros

  • Automation ist relativ einfach zu implementieren
  • Viel Funktionalität
  • Die Syntax ist ähnlich wie JUnit

Cons

  • Nicht groß für DOM-Tests, da es Tests innerhalb eines iFrame läuft.
  • Keine Garantie, dass Tests werden in der Reihenfolge ausgeführt werden, die sie geschrieben werden.
  • Kann nicht Firebug auf testrunner Seite. Benötigen Sie eine andere Registerkarte öffnen mit dem eigentlichen Test-Code haben.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top