Wie gebe ich ein Testverzeichnis für Mokka an?


219

Mocha versucht teststandardmäßig, Testdateien zu finden. Wie gebe ich ein anderes Verzeichnis an, z server-test.


Obwohl dies keine 100% ige Antwort auf Ihre Frage ist, besuchen Sie jaketrent.com/post/run-single-mocha-test. Ich habe hier nach einer Anleitung zum Ausführen einer bestimmten Testsuite gesucht. Dies zeigt, dass Sie die von Ihnen verwendeten Tests verwenden .onlyund .skipverwalten 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.
Dave Sag

Antworten:


141

Bearbeiten: Diese Option ist veraltet: https://mochajs.org/#mochaopts


Wenn Sie es tun , indem sie nach wie vor nur läuft mochaauf der Kommandozeile, wollten aber die Tests in einem Ordner laufen ./server-testsstatt ./test, erstellen Sie eine Datei auf ./test/mocha.optsmit 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/


12
Dies ist die Option mit der geringsten Reibung und sollte die akzeptierte Antwort sein IMHO
Nick Tomlin

Ich benutze eine der Kesselplatten und sie in der folgenden Zeile, möglicherweise wegen der Fenster, können Sie bitte einmal überprüfen. Knoten ./knotenmodule/mocha/bin/mocha $ (finden Sie api -name '* -test.js') --compiler js: babel-core / register
kobe

1
ein Juwel, spielt auch gut mit den Webstorm IDE Mokka-Debug-Konfigurationen, wählen Sie einfach "Dateimuster" und lassen Sie die Eingabe leer, und es wird mocha.opts
danday74

3
Das ist sicher die beste Antwort. Höchstwahrscheinlich lohnt es sich, in Ihre Antwort auch hinzuzufügen, dass die mocha.optsDatei platziert werden kann, wo immer Sie möchten, und dann einfach mochaden Pfad zu seiner Konfigurationsdatei anzugeben, zum Beispiel durch:mocha --opts ./mocha.opts
quirimmo

1
Sie können auch einfach --recursive in die Mokka-Befehlszeile einfügen, was nützlich ist, wenn Sie das Testskript in Ihrer package.json
unludo

282

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.


1
Das funktioniert bei mir nicht. Wenn ich es so machen will, muss ich es machenmocha test/server-test
jonnie

22
Die doppelte Anführungszeichen hatten mich für Ewigkeiten! Danke, dass du meine geistige Gesundheit gerettet hast. Rufen Sie alle an, die dies lesen, um diesen doppelten Anführungszeichen besondere Aufmerksamkeit zu schenken.
Ctrlplusb

11
In meinem Fall habe ich verwendet 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.
Stoutie

1
oder verwenden Sie einfach, --recursivewie ich unten erkläre
Jeff Dickey

4
Dies sollte die Antwort sein! Die doppelten Anführungszeichen retten mich
Minh Thai

81

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')

29
oder verwenden Sie einfach, --recursivewie ich unten erkläre
Jeff Dickey

5
Mit anderen Worten, mochahat keine Option, um die gewünschte Verzeichnisstruktur in der Konfiguration festzulegen?
Green

Client-Benutzer $ mocha $ (find tests -name '* .js') -bash: mocha: Befehl nicht gefunden; Diesen Fehler erhalten.
lft93ryt

1
Das ist zu kompliziert und irreführend. Bevorzugen Sie Mokka-Optionen, anstatt einen Betriebssystembefehl zu verwenden.
Michael Bushe

Ihr Beitrag beantwortet die Frage nicht
Ekkis

30

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 .


Dies ist wohl der genaueste Weg, dies zu tun.
ArturS

29

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

22

In node.js einige neue Konfigurationen ab Mocha v6 :

Option 1: .mocharc.jsonIm Stammverzeichnis des Projekts erstellen :

{
  "spec": "path/to/test/files"
}

Option 2: mochaEigenschaft in Projekt hinzufügen package.json:

{
  ...

  "mocha": {
    "spec": "path/to/test/files"
  }
}

Weitere Optionen finden Sie hier .


20

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 --recursiveSchalter

mocha --recursive test_directory/

11

Ich hatte dieses Problem gerade und löste es, indem --recursiveich 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/


9

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


3

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.


11
Ab heute kann man die --recursiveOption wie folgt verwenden:mocha --recursive "some_dir"
Superjos

3
Verwenden 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)
Alex 75

3

Wenn Sie verwenden nodejs, in Ihrem package.jsonUnterscripts

  1. Für global (-g)Installationen: "test": "mocha server-test"oder"test": "mocha server-test/**/*.js"für Unterdokumente
  2. Für projectInstallationen: "test": "node_modules/mocha/bin/mocha server-test"oder "test": "node_modules/mocha/bin/mocha server-test/**/*.js"für Unterdokumente

Dann führen Sie Ihre Tests einfach normal aus als npm test


Ich finde, dass npm run mocha "./test/*.spec.js!(~)"das Glob-Argument ignoriert wird, aber node_modules/.bin/mocha "./test/*.spec.js!(~)"nicht.
Ironchicken

@ironchicken, um Argumente von "npm run" zu übergeben, verwenden Sie - wie innpm run mocha -- yourArgs
Pedro A

3

Wie von @superjos in Kommentaren erwähnt

mocha --recursive "some_dir"


2

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 .


2

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.