Wie installiere und führe ich Mocha aus, das Node.js-Testmodul? Nach der Installation wird "Mokka: Befehl nicht gefunden" angezeigt

89

Ich habe Probleme, Mocha wie erwartet zum Laufen zu bringen, und ich würde gerne sagen, wie dokumentiert, aber es scheint nicht viel Dokumentation darüber zu geben, wie man das Ding tatsächlich zum Laufen bringt.

Ich habe es mit npm(sowohl global als auch lokal) installiert und jedes Mal, wenn ich es ausführe, bekomme ich:

$ mocha
mocha: command not found

Ok, also dachte ich, dass es nicht in meinem ist PATH, also habe ich versucht, es direkt auszuführen.

$ ./node_modules/mocha/bin/mocha 
execvp(): No such file or directory

Schließlich versuchte ich, die andere binDatei zu treffen , und bekam,

$ ./node_modules/mocha/bin/_mocha 
path.existsSync is deprecated. It is now called `fs.existsSync`.

  .

   1 tests complete (1ms)

Wie kann ich meine Tests nur mit einem einzigen Befehl ausführen? Gelübde scheinen es zuzulassen, aber ich habe gehört, dass Mokka die bessere Wahl ist. Ich kann es einfach nicht richtig zum Laufen bringen.

Und irgendwelche Gedanken zu dem Fehler, den ich oben bei meinem dritten Versuch bekommen habe?

Bearbeiten:

Ich renne,

  • Ubuntu 11.10 64-Bit
  • Node.js 0.7.5
  • npm 1.1.8
  • Mokka 0.14.1
  • sollte 0.6.0
Stephen Melrose
quelle
2
Mit Knoten 0.6.12, npm 1.1.4 und Ausführung erhalte npm install mochaich ./node_modules/.bin/mochawie erwartet. sudo npm install -g mochabekommt mir /usr/local/bin/mocha. Wenn dies in Ihrer Umgebung nicht richtig funktioniert, liegt möglicherweise ein Fehler vor oder der Mokka wurde nicht aktualisiert, um Knoten 0.7 zu unterstützen. *. In Bezug auf Ihre Verfallswarnung existsund existsSyncwurden von in Knoten 0.7.1 von pathnach fsverschoben.
Linus Thiel
Ich habe ein Downgrade auf Node.js 0.6.12 durchgeführt, "./node_modules/.bin" zu meinem PATH hinzugefügt und alles ist in Ordnung mit der Welt.
Stephen Melrose

Antworten:

176

Seit npm 5.2.0 ist in npm ein neuer Befehl "npx" enthalten, der dies viel einfacher macht, wenn Sie Folgendes ausführen:

npx mocha <args>

Hinweis: Die optionalen Argumente werden an den ausgeführten Befehl weitergeleitet (in diesem Fall Mokka).

Dadurch wird automatisch der ausführbare Befehl "Mokka" aus Ihrem lokal installierten Mokka ausgewählt (fügen Sie ihn immer als Entwicklungsabhängigkeit hinzu, um sicherzustellen, dass der richtige Befehl immer von Ihnen und allen anderen verwendet wird).

Beachten Sie jedoch, dass dieser Befehl, wenn Sie Mokka nicht installiert haben, automatisch die neueste Version abruft und verwendet. Dies ist für einige Tools (z. B. Gerüste) ideal, für bestimmte Abhängigkeiten jedoch möglicherweise nicht besonders empfehlenswert Pin auf eine bestimmte Version.

Sie können mehr über npx lesen hier


Wenn Sie nun nicht direkt Mokka aufrufen möchten, sondern ein benutzerdefiniertes npm-Skript definieren möchten, einen Alias, der möglicherweise andere npm-Binärdateien aufruft ...

Sie möchten nicht, dass Ihre Bibliothekstests je nach Maschinen-Setup (Mokka als globale, globale Mokka-Version usw.) fehlschlagen. Die Verwendung des lokalen Mokkas, der plattformübergreifend funktioniert, ist folgende:

node node_modules/.bin/mocha

npm fügt Aliase zu allen Binärdateien in Ihren Abhängigkeiten von diesem speziellen Ordner hinzu. Schließlich fügt npm beim Ausführen eines npm-Skripts automatisch node_modules / .bin zum PATH hinzu, sodass Sie in Ihrer package.json Folgendes tun können:

"scripts": {
  "test": "mocha"
}

und rufe es mit auf

npm test
Benja
quelle
1
+1, ich habe vor einiger Zeit Mokka verwendet, aber ich habe es nicht bemerkt. Dies sollte die akzeptierte Antwort sein!
Gihanchanuka
6
@ michael.kebe nein, Sie müssen diesen Pfad nicht angeben, um den lokalen Mokka zu verwenden. Npm fügt dem $ PATH bereits "./node_modules/.bin" hinzu, sodass standardmäßig die lokale Version verwendet wird.
Benja
Ich glaube, dass der Befehl Knoten node_modules / mocha / bin / mocha sein sollte, nicht node node_modules / .bin / mocha
Mina Luke
3
@MinaLuke, das auch funktioniert, aber es ist eine schlechte Idee, /node_modules/.bin/{module-binary-name}ist der Ort, an dem npm Verknüpfungen zu Binärdateien in Ihren Abhängigkeiten einfügt. Sie sollten nicht direkt auf eine Datei in den Quellen einer Abhängigkeit verweisen, da dies bei der nächsten Version möglicherweise nicht funktioniert .
Benja
1
@ DougBarbieri netter Fang, es ist eine alte Antwort, ich werde aktualisieren, um npx zu erwähnen, danke!
Benja
18

Nach weiterer Lektüre und Bestätigung durch Linus G Thiel oben stellte ich fest, dass ich einfach musste,

  • Downgrade auf Node.js 0.6.12
  • Und entweder,
    • Installieren Sie Mocha als global
    • ./node_modules/.binZu meinem hinzufügenPATH
Stephen Melrose
quelle
4
Ich habe Knoten 0.8.12 und Mokka sowohl global als auch lokal installiert (für verschiedene Projekte) und sie funktionieren. Es ist also nicht erforderlich, den Knoten herunterzustufen. Stellen Sie für lokal installierten Mokka einfach sicher, dass Ihr PFAD wie oben eingestellt ist, oder rufen Sie ihn direkt von Ihrem Skript aus auf (Makefile oder "scripts" -Tag).
Qichao Dong
1
Ich hatte Mocha lokal und global installiert, aber es wurde nicht im Pfad gefunden (Win8). Ich musste den Ordner './node_modules/.bin' relativ zu meinem Projekt manuell zu meinem PATH hinzufügen, die Konsole neu starten und dann 'mocha' eingeben. Nicht ideal, aber ein schneller Hack, um es zum Laufen zu bringen. Wenn Sie einen Standort auf oberster Ebene hatten, um Mokka lokal zu installieren, verknüpfen Sie diesen Pfad möglicherweise, damit Sie ihn an anderer Stelle verwenden können.
Ali
1

Für Windows :

Package.json

  "scripts": {
    "start": "nodemon app.js",
    "test": "mocha"
  },

Führen Sie dann den Befehl aus

npm run test
Ashutosh Jha
quelle
1

Während der Installation der Knotenmodule für Mokka hatte ich die folgenden Befehle ausprobiert

  • npm installieren
  • npm Mokka installieren
  • npm install --save-dev Mokka
  • npm install mocha -g #, um es auch global zu installieren

und beim Ausführen oder Ausführen des Mokka-Tests habe ich versucht

  • Mokka-Test
  • npm run test
  • Mokka-Test test \ index.test.js
  • npm Test

aber ich bekam den folgenden Fehler als:

'Mokka' wird nicht als interner oder externer Befehl erkannt

Nachdem Sie alles ausprobiert hatten, stellte sich heraus, dass der Pfad zu den Umgebungsvariablen unter den Systemvariablen wie folgt festgelegt wurde:

C: \ Programme \ nodejs \

und es hat funktioniert :)

DHEERAJ
quelle