Mocha versucht test
standardmäßig, Testdateien zu finden. Wie gebe ich ein anderes Verzeichnis an, z server-test
.
unit-testing
node.js
mocha
Freilauf
quelle
quelle
.only
und.skip
verwalten können Rennen. Wichtig bei der Entwicklung einer bestimmten Funktion, wenn Sie nicht darauf warten möchten, dass die gesamte Testsuite ständig ausgeführt wird.Antworten:
Bearbeiten: Diese Option ist veraltet: https://mochajs.org/#mochaopts
Wenn Sie es tun , indem sie nach wie vor nur läuft
mocha
auf der Kommandozeile, wollten aber die Tests in einem Ordner laufen./server-tests
statt./test
, erstellen Sie eine Datei auf./test/mocha.opts
mit nur diesem in der Datei:Wenn Sie alles in diesem Ordner und in diesen Unterverzeichnissen ausführen möchten, legen Sie dies in ab
test/mocha.opts
mocha.opts
Werden die Argumente über die Befehlszeile übergeben, sodass die erste Zeile nur das Verzeichnis ist, aus dem Sie die Tests ändern möchten./test/
quelle
mocha.opts
Datei platziert werden kann, wo immer Sie möchten, und dann einfachmocha
den Pfad zu seiner Konfigurationsdatei anzugeben, zum Beispiel durch:mocha --opts ./mocha.opts
Benutze das:
Oder wenn Sie Unterverzeichnisse haben, verwenden Sie diese:
Beachten Sie die Verwendung von doppelten Anführungszeichen. Wenn Sie sie weglassen, können Sie möglicherweise keine Tests in Unterverzeichnissen ausführen.
quelle
mocha test/server-test
mocha ./**/*.test.js
(damit ich die Testdatei mit der Moduldatei zusammenfassen kann). Das Muster funktionierte für mich nicht mehr, als ich eine Testdatei auf einer anderen Ebene in der Dateihierarchie als die übrigen Tests hinzufügte und nur diese eine ungerade Balldatei und nicht das Dutzend andere fand, die auf derselben Ebene in der Hierarchie lebten . Das Einschließen in Anführungszeichen hat das Problem behoben.--recursive
wie ich unten erkläreHier ist eine Möglichkeit, wenn Sie Unterordner in Ihrem Testordner haben, z
Dann können Sie unter Linux den Befehl find verwenden, um alle * .js-Dateien rekursiv aufzulisten und an mocha zu übergeben:
quelle
--recursive
wie ich unten erkläremocha
hat keine Option, um die gewünschte Verzeichnisstruktur in der Konfiguration festzulegen?Der gute Weg, dies zu tun, besteht darin, in package.json ein "test" -npm-Skript hinzuzufügen, das Mokka mit den richtigen Argumenten aufruft. Auf diese Weise beschreibt Ihre package.json auch Ihre Teststruktur. Außerdem werden all diese plattformübergreifenden Probleme in den anderen Antworten vermieden (doppelte oder einfache Anführungszeichen, "Finden" usw.).
Damit Mokka alle js-Dateien im Verzeichnis "test" ausführt:
Um dann nur die Rauchtests durchzuführen, rufen Sie an:
Auf diese Weise können Sie die Ausführung aller Tests in allen Projekten standardisieren. Wenn also ein neuer Entwickler mit Ihrem oder einem anderen Projekt beginnt, weiß er, dass "npm test" die Tests ausführt. Hierfür gibt es einen guten historischen Vorrang (Maven zum Beispiel "machen" die meisten Old-School-Projekte auch). Es hilft CI sicher, wenn alle Projekte den gleichen Testbefehl haben.
In ähnlicher Weise haben Sie möglicherweise eine Teilmenge schnellerer "Rauch" -Tests, die Mokka ausführen soll:
Um dann nur die Rauchtests durchzuführen, rufen Sie an:
Ein weiteres gängiges Muster besteht darin, Ihre Tests im selben Verzeichnis wie die zu testende Quelle abzulegen, aber die Testdateien * .spec.js aufzurufen. Beispiel: src / foo / foo.js wird von src / foo / foo.spec.js getestet.
So führen Sie alle Tests mit dem Namen * .spec.js gemäß Konvention aus:
Um dann alle Tests auszuführen, rufen Sie Folgendes auf:
Sehen Sie das Muster hier? Gut. :) Konsistenz besiegt Mura .
quelle
Verwenden Sie nicht die Option -g oder --grep. Dieses Muster arbeitet mit dem Namen des Tests in it (), nicht mit dem Dateisystem. Die aktuelle Dokumentation ist diesbezüglich irreführend und / oder völlig falsch. Um den gesamten Befehl auf einen Teil des Dateisystems zu beschränken, können Sie ein Muster als letztes Argument übergeben (es ist kein Flag).
Mit diesem Befehl wird Ihr Reporter beispielsweise auf spec gesetzt, aber nur js-Dateien werden sofort im Server-Test-Verzeichnis getestet:
Dieser Befehl führt das gleiche wie oben aus und führt nur die Testfälle aus, in denen die it () - Zeichenfolge / Definition eines Tests mit "Fnord:" beginnt:
quelle
In node.js einige neue Konfigurationen ab Mocha v6 :
Option 1:
.mocharc.json
Im Stammverzeichnis des Projekts erstellen :Option 2:
mocha
Eigenschaft in Projekt hinzufügenpackage.json
:Weitere Optionen finden Sie hier .
quelle
Führen Sie alle Dateien in
test_directory
übereinstimmenden Unterverzeichnissen austest.js
oder benutze den
--recursive
Schalterquelle
Ich hatte dieses Problem gerade und löste es, indem
--recursive
ich die Option (die ich festgelegt hatte) entfernte und dieselbe oben vorgeschlagene Struktur verwendete:mochify "test/unit/**/*.js"
Dadurch wurden
/test/unit/
für mich alle Tests in allen Verzeichnissen ausgeführt , während die anderen Verzeichnisse darin ignoriert wurden/test/
quelle
Jetzt, an einem Tag (Jahr 2020) , können Sie dies mit der Mokka-Konfigurationsdatei erledigen :
Schritt 1: Erstellen Sie die Datei .mocharc.js am Stammverzeichnis Ihrer Anwendung
Schritt 2: Fügen Sie den folgenden Code in die Mokka-Konfigurationsdatei ein:
Weitere Optionen in der Konfigurationsdatei finden Sie unter folgendem Link: https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js
quelle
Ich bin unter Windows 7 mit node.js v0.10.0 und mocha v1.8.2 und npm v1.2.14. Ich habe nur versucht, Mokka dazu zu bringen, den Pfadtest / die Pfadeinheit zu verwenden, um meine Tests zu finden.
Die Verwendung der Option "test / unit / *. Js" funktioniert unter Windows nicht. Aus guten Gründen erweitert die Windows-Shell keine Platzhalter wie Unixen.
Die Verwendung von "test / unit" funktioniert jedoch ohne das Dateimuster. z.B. "mocha test / unit" führt alle Dateien aus, die sich im Ordner test / unit befinden.
Dadurch werden nur noch eine Ordnerdatei als Test ausgeführt, Sie können jedoch mehrere Verzeichnisnamen als Parameter übergeben.
Um eine einzelne Testdatei auszuführen, können Sie auch den vollständigen Pfad und den Dateinamen angeben. z.B. "mokka test / unit / mytest1.js"
Ich habe in package.json tatsächlich für npm "scripts" eingerichtet: {"test": "mocha test / unit"},
Damit dieser 'npm-Test' meine Unit-Tests ausführt.
quelle
--recursive
Option wie folgt verwenden:mocha --recursive "some_dir"
node_modules\.bin\mocha "test\unit\*.js"
funktioniert unter Windows. Funktioniert auchnode_modules\.bin\mocha "**\*.js"
(mein wirklicher Fall). Aber ich suche nach einer Möglichkeit, das Verzeichnis node_modules auszuschließen . (Ich benutze auch gulpfile.js, aber manchmal muss ich den Test direkt mit Mokka starten)Wenn Sie verwenden
nodejs
, in Ihrempackage.json
Unterscripts
global (-g)
Installationen:"test": "mocha server-test"
oder"test": "mocha server-test/**/*.js"
für Unterdokumenteproject
Installationen:"test": "node_modules/mocha/bin/mocha server-test"
oder"test": "node_modules/mocha/bin/mocha server-test/**/*.js"
für UnterdokumenteDann führen Sie Ihre Tests einfach normal aus als
npm test
quelle
npm run mocha "./test/*.spec.js!(~)"
das Glob-Argument ignoriert wird, abernode_modules/.bin/mocha "./test/*.spec.js!(~)"
nicht.npm run mocha -- yourArgs
Wie von @superjos in Kommentaren erwähnt
mocha --recursive "some_dir"
quelle
Dies scheint keine "einfache" Unterstützung für das Ändern des Testverzeichnisses zu sein.
Vielleicht sollten Sie sich dieses Problem jedoch in Bezug auf Ihre Frage ansehen .
quelle
Wie @ jeff-dickey vorgeschlagen hat, erstellen Sie im Stammverzeichnis Ihres Projekts einen Ordner mit dem Namen
test
. Erstellen Sie in diesem Ordner eine Datei mit dem Namenmocha.opts
. Wo ich nun versuche, Jeffs Antwort zu verbessern, funktionierte für mich, anstatt den Namen nur eines Testordners anzugeben, ein Muster, um alle Tests zu finden, die in meinem Projekt ausgeführt werden sollen, indem ich diese Zeile hinzufügte:*/tests/*.js --recursive
immocha.opts
Wenn Sie stattdessen die genauen Ordner angeben möchten, in denen nach Tests gesucht werden soll, habe ich Folgendes ausgeführt:
Ich hoffe, dies hilft jedem, der mehr brauchte als die anderen Antworten
quelle