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:
server-tests
Wenn Sie alles in diesem Ordner und in diesen Unterverzeichnissen ausführen möchten, legen Sie dies in ab test/mocha.opts
server-tests
--recursive
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/
mocha.opts
Datei platziert werden kann, wo immer Sie möchten, und dann einfach mocha
den Pfad zu seiner Konfigurationsdatei anzugeben, zum Beispiel durch:mocha --opts ./mocha.opts
Benutze das:
mocha server-test
Oder wenn Sie Unterverzeichnisse haben, verwenden Sie diese:
mocha "server-test/**/*.js"
Beachten Sie die Verwendung von doppelten Anführungszeichen. Wenn Sie sie weglassen, können Sie möglicherweise keine Tests in Unterverzeichnissen ausführen.
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äre
Hier ist eine Möglichkeit, wenn Sie Unterordner in Ihrem Testordner haben, z
/test
/test/server-test
/test/other-test
Dann können Sie unter Linux den Befehl find verwenden, um alle * .js-Dateien rekursiv aufzulisten und an mocha zu übergeben:
mocha $(find test -name '*.js')
--recursive
wie ich unten erkläre
mocha
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:
"scripts": {
"start": "node ./bin/www", -- not required for tests, just here for context
"test": "mocha test/**/*.js"
},
Um dann nur die Rauchtests durchzuführen, rufen Sie an:
npm test
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:
"scripts": {
"test": "mocha test/**/*.js"
"smoketest": "mocha smoketest/**/*.js"
},
Um dann nur die Rauchtests durchzuführen, rufen Sie an:
npm smoketest
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:
"scripts": {
"test": "mocha **/*.spec.js"
},
Um dann alle Tests auszuführen, rufen Sie Folgendes auf:
npm test
Sehen Sie das Muster hier? Gut. :) Konsistenz besiegt Mura .
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:
mocha --reporter spec server-test/*.js
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:
mocha --reporter spec --grep "Fnord:" server-test/*.js
In node.js einige neue Konfigurationen ab Mocha v6 :
Option 1: .mocharc.json
Im Stammverzeichnis des Projekts erstellen :
{
"spec": "path/to/test/files"
}
Option 2: mocha
Eigenschaft in Projekt hinzufügen package.json
:
{
...
"mocha": {
"spec": "path/to/test/files"
}
}
Weitere Optionen finden Sie hier .
Führen Sie alle Dateien in test_directory
übereinstimmenden Unterverzeichnissen austest.js
find ./parent_test_directory -name '*test.js' | xargs mocha -R spec
oder benutze den --recursive
Schalter
mocha --recursive test_directory/
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/
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:
'use strict';
module.exports = {
spec: 'src/app/**/*.test.js'
};
Weitere Optionen in der Konfigurationsdatei finden Sie unter folgendem Link: https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js
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.
--recursive
Option wie folgt verwenden:mocha --recursive "some_dir"
node_modules\.bin\mocha "test\unit\*.js"
funktioniert unter Windows. Funktioniert auch node_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 Ihrem package.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
npm run mocha "./test/*.spec.js!(~)"
das Glob-Argument ignoriert wird, aber node_modules/.bin/mocha "./test/*.spec.js!(~)"
nicht.
npm run mocha -- yourArgs
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 .
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
im mocha.opts
Wenn Sie stattdessen die genauen Ordner angeben möchten, in denen nach Tests gesucht werden soll, habe ich Folgendes ausgeführt:
shared/tests/*.js --recursive
server/tests/graph/*.js --recursive
Ich hoffe, dies hilft jedem, der mehr brauchte als die anderen Antworten
.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.