Was ist das beste Testframework für Node.js? [geschlossen]

130

Ich habe mir die ziemlich lange Liste der Test-Frameworks unter https://github.com/ry/node/wiki/modules#testing angesehen . Wie ist die Erfahrung mit diesen Frameworks?

Natürlich wäre die Möglichkeit, im Browser ausgeführt zu werden, ein großer Bonus, aber ich interessiere mich hauptsächlich für Node.js. Etwas mit einer stark asynchronen Neigung wäre großartig.

doffm
quelle

Antworten:

70

Aktualisieren:

Mokka ist meiner Meinung nach der beste.


Wie ist die Erfahrung mit diesen Frameworks?

Ich habe mit Expresso gespielt , einem ziemlich coolen Test-Framework, das auch Test-Coverage bietet. Es wurde von TJ Holowaychuk geschaffen, der auch der Schöpfer ist Express.js (irrsinnig schnell (und kleine) serverseitige JavaScript - Framework Web - Entwicklung gebaut auf Node.js und Connect). Ich habe kürzlich gesehen, dass er auch eine coole Bibliothek namens should.js hat , die zusammen mit Expresso für ein noch besseres Testerlebnis verwendet werden kann.

Die Möglichkeit, im Browser ausgeführt zu werden, wäre natürlich ein großer Bonus

Ich glaube nicht, dass es im Browser ausgeführt werden kann, aber ich verstehe auch nicht, warum Sie es im Browser ausführen möchten?

aber ich interessiere mich hauptsächlich für Node.js. Etwas mit einer stark asynchronen Neigung wäre großartig.

Zitat aus dem Expresso:

Das an jeden Rückruf übergebene Argument lautet beforeExit. Mit diesem Argument wird normalerweise bestätigt, dass Rückrufe aufgerufen wurden.

Mit beforeExit können Sie asynchrone Funktionen testen.


TIPP : Folgen Sie TJ Holowaychuk auf GitHub , da er sehr guten Open-Source-Code erstellt.

Alfred
quelle
Vielen Dank für die Antwort. Ich habe Expresso ausprobiert, aber festgestellt, dass die asynchrone Unterstützung nicht sehr intuitiv ist. (Für mich sowieso)
doffm
3
Ich probiere gerade Gelübde ( vowsjs.org ) aus, die für mich leichter zu verstehen waren.
doffm
vowjs sah auch wie ein schönes Test-Framework aus. Ich mag die Testabdeckungsfunktion von Expresso. Außerdem frage ich mich, was du nicht verstanden hast?
Alfred
4
Sie sagen, dass Sie jetzt Mokka bevorzugen, aber warum?
Jonathan Arkell
Probier es einfach. Mokka hat alles :). Sogar Browserunterstützung, Codeabdeckung. Sie nennen es, Mokka hat es!
Alfred
40

Ich verwende VowsJS , ein einfach zu verwendendes asynchrones BDD-Framework (Behavior Driven Development), und erledige die Arbeit.

Nach dem, was ich in letzter Zeit gesehen habe, haben sich viele entschieden, ihre NPM-Module zu testen. Daher glaube ich, dass es bisher eines der besten ist.

Einige beliebte Test-Frameworks, die mit NodeJS verwendet werden könnten, sind auch folgende:

Sie können auch eine Liste der JavaScript - Test - Frameworks finden Sie hier

Nur wenige weitere Bibliotheken, die Ihnen beim Schreiben von besserem Code helfen könnten, sind folgende:

Es gibt auch Bamboo CI Server von Atlassian , der Builds und Tests automatisiert. Es ist ein Paket für Apache / Tomcat (das sux, weil es Java verwendet und das es sehr schwer macht) ist ebenfalls nicht kostenlos, aber es hat eine Starterlizenz, die 10 US-Dollar kostet, also glaube ich, dass es erschwinglich ist. Es ist der leistungsstärkste aller bisher gefundenen CI-Server und unterstützt alle Komponententests, die xUnit unterstützen. Dies bedeutet, dass Sie mit Bamboo Builds / Tests für jede Sprache ausführen können.

Eine weitere Option für CI mit NodeJS ist Travis, die viele Leute für ihre Open Source-Projekte verwenden, wie es heißt. Ein gehosteter kontinuierlicher Integrationsdienst für die Open Source-Community.

Es gibt auch eine Google-Gruppendiskussion mit dem Thema " Kontinuierliche Integration für Node JS-Projekte" .

Panosru
quelle
6
Ein Hinweis für Leute, die daran denken, Gelübde zu verwenden: Es wurde seit 2012 nicht mehr aktualisiert
Code Commander
Sie haben danach einige Änderungen vorgenommen . letzte Veröffentlichung: September 2015
Andre Figueiredo
Haben Sie 2020 ein schlechtes Gateway auf der offiziellen Website von Vows, vielleicht tot?
Lincoln,
wow, Kumpel, seitdem sind viele Jahre vergangen. Alles, was ich jetzt über VowJS finden konnte, ist Folgendes: istavros.github.io/vowjs, aber leider kann ich nicht vorschlagen, dass Sie es bis 2020 verwenden. Es ist veraltet und ich würde es stark tun Schlagen Sie vor, stattdessen Mocha ( mochajs.org ), Jasmin ( jasmine.github.io ) und Jest ( jestjs.io ) zu überprüfen .
Panosru
14

Basierend auf den obigen Kommentaren des Fragestellers habe ich Gelübde ausprobiert und es hat viele Probleme gelöst, die ich mit meinen asynchronen Tests hatte. Die Fähigkeit, serielle und parallele Tests zu mischen, ist fantastisch.

Lesen Sie die Anleitung sorgfältig durch, aber sobald Sie den Dreh raus haben, ist sie flexibel, leistungsstark und liefert schöne, saubere Ergebnisse.

UPDATE: Ich würde die Leute auch ermutigen, sich nach ihren Behauptungen umzusehen. Es ermöglicht sehr flexible, gut lesbare Asserts und ist sowohl mit Expresso als auch mit Vows und wahrscheinlich auch mit den meisten anderen Test-Frameworks kompatibel.

(Ich poste dies als separate Antwort, nur für den Fall, dass die Leute die Kommentare zu Alfreds Antwort nicht bemerken.)

UPDATE 07.01.2015: Für das, was es wert ist, habe ich seitdem von Gelübden zu Mokka und von Sollte zu Chai gewechselt. Mocha bietet jetzt eine viel bessere Unterstützung für asynchrone Tests mit Versprechungen, und Chai bietet verschiedene flexible Assert-Optionen, einschließlich der expectAPI, für diejenigen, die den Objektprototyp nicht ändern möchten.

Chris Jaynes
quelle
1
shouldgreift eine nicht aufzählbare Eigenschaft shouldan, die dem ObjectPrototyp zugeordnet ist, was bedeutet, dass alle Werte / Objekte, mit denen Sie sich befassen, zur Testzeit und zur Produktionszeit etwas anders aussehen . Während dies in den meisten Fällen wahrscheinlich nur funktioniert, ist es im Prinzip eine schlechte Idee, eingebaute Prototypen zu modifizieren. es nur während des Testens zu tun, fühlt sich falsch an. Es wurde alles nur gemacht, damit sie eine schöne Syntax haben können.
Flow
@flow seit v2 ist es einfach zu verwenden, shouldohne zu erweitern Object.prototype(einfach aufrufen require('should').noConflict()und should.js als erwartete Alternative verwenden.
den bardadym
6

Ich habe angefangen, Jasmine für meine JavaScript-Tests zu verwenden, weil es klein ist und sowohl im Browser als auch im Knoten ausgeführt wird. Es hat auch eine wirklich solide Berichts- und Matcher-API, so dass es in Zukunft einfach in andere Tools integriert werden kann. Ein eingebautes Mocking-Framework ist ebenfalls nützlich, da es oft eines der ersten Dinge ist, die ich hinzufügen würde, wenn ich qunit für TDD im Browser verwendet habe.

Mark B.
quelle
2

Wenn Sie ein echtes BDD-Framework wünschen, sollten Sie Yadda in Betracht ziehen . Es lässt sich in Mokka, Jasmin, Nodeunit, Qunit, Zombie und Casperjs integrieren, um Feature-Dateien zu unterstützen, z

   Scenario: provides the version of all services
      given service x is running
      and service y is running
      when I request the service versions
      then service x should be version 0.0.1
      and service y should be version 0.0.2
user2434418
quelle
2

Ich habe Nodeunit verwendet und seine Fähigkeit, mit asynchronen Funktionen zu arbeiten, ist ziemlich einfach.

Es gibt eine nette Anleitung, die Sie bereit machen sollte, mit nodeunit auf seinem Blog loszulegen .

[ Hinweis: Die API hat sich seit dem Blogpost geändert - setUp(callback)und tearDown(callback)beide verwenden einen Rückruf als Argument, das Sie aufrufen müssen, wenn Ihr Setup / Teardown abgeschlossen ist. ]]

Vanwaril
quelle
Wenn Sie sich dies ansehen und einige Tests der Funktionen von mongoose.js in Expresso versuchen, ist es hilfreich, wenn Nodeunit nicht alle Tests parallel ausführt und SetUp- und TearDown-Tests zulässt.
Asparagino