Come installi ed esegui Mocha, il modulo di test di Node.js? Ottenere "mocha: comando non trovato" dopo l'installazione


92

Ho problemi a far funzionare Mocha come previsto, e mi piacerebbe dire come documentato, ma (sembra) non ci sia molta documentazione su come far funzionare effettivamente la cosa.

L'ho installato utilizzando npm(sia a livello globale che locale) e ogni volta che lo eseguo ottengo:

$ mocha
mocha: command not found

Ok, quindi ho pensato che non fosse nel mio PATH, quindi ho provato a eseguirlo direttamente,

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

Alla fine, ho provato a premere l'altro binfile e ho ottenuto,

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

  .

  ✔ 1 tests complete (1ms)

Come posso eseguire i miei test con un solo comando? Sembra che i voti te lo permettano, ma ho sentito che Mocha è la scelta migliore, non riesco a farlo funzionare correttamente.

E qualche idea sull'errore che ho ricevuto sopra nel mio terzo tentativo?

Modificare:

Sto correndo,

  • Ubuntu 11.10 a 64 bit
  • Node.js 0.7.5
  • npm 1.1.8
  • moka 0.14.1
  • dovrebbe 0.6.0

2
Con il nodo 0.6.12, npm 1.1.4 e l'esecuzione npm install mocha, ottengo ./node_modules/.bin/mochacome previsto. sudo npm install -g mochami prende /usr/local/bin/mocha. Se questo non funziona correttamente nel tuo ambiente, potrebbe essere un bug, o semplicemente mocha non aggiornato per supportare il nodo 0.7. *. Per quanto riguarda l'avviso di deprecazione, existse existsSyncsono stati spostati da patha fsnel nodo 0.7.1.
Linus Thiel

Ho effettuato il downgrade a Node.js 0.6.12, aggiunto "./node_modules/.bin" al mio PERCORSO e tutto va bene con il mondo.
Stephen Melrose

Risposte:


184

a partire da npm 5.2.0, c'è un nuovo comando "npx" incluso con npm che lo rende molto più semplice, se esegui:

npx mocha <args>

Nota: gli argomenti opzionali vengono inoltrati al comando in esecuzione (mocha in questo caso)

questo sceglierà automaticamente il comando eseguibile "mocha" dal tuo mocha installato localmente (aggiungilo sempre come dipendenza dev per assicurarti che quello corretto sia sempre usato da te e da tutti gli altri).

Fai attenzione però che se non hai installato mocha, questo comando recupererà e utilizzerà automaticamente la versione più recente, il che è ottimo per alcuni strumenti (come gli scaffolder ad esempio), ma potrebbe non essere il più raccomandabile per alcune dipendenze in cui potresti volerlo blocca una versione specifica.

Puoi leggere di più su npx qui


Ora, se invece di invocare direttamente mocha, vuoi definire uno script npm personalizzato, un alias che potrebbe richiamare altri binari npm ...

non vuoi che i test della tua libreria falliscano a seconda della configurazione della macchina (mocha come global, global mocha version, ecc.), il modo per utilizzare il mocha locale che funziona su più piattaforme è:

node node_modules/.bin/mocha

npm mette gli alias a tutti i file binari nelle tue dipendenze in quella cartella speciale. Infine, npm aggiungerà automaticamente node_modules / .bin al PERCORSO durante l'esecuzione di uno script npm, quindi nel tuo package.json puoi fare semplicemente:

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

e invocalo con

npm test

1
+1, ho usato la moka da qualche tempo, ma non me ne rendevo conto. Questa dovrebbe essere la risposta accettata!
gihanchanuka

7
@ michael.kebe no, non è necessario specificare quel percorso per utilizzare il mocha locale, npm aggiunge già "./node_modules/.bin" a $ PATH, quindi userà la versione locale per impostazione predefinita.
Benja

Credo che il comando dovrebbe essere node node_modules / mocha / bin / mocha non node node_modules / .bin / mocha
Mina Luke

3
Anche @MinaLuke funziona ma è una cattiva idea, /node_modules/.bin/{module-binary-name}è il luogo in cui npm inserisce scorciatoie ai binari nelle tue dipendenze, non dovresti fare riferimento direttamente a un file nei sorgenti di una dipendenza, poiché potrebbe non funzionare nella versione successiva.
Benja

1
@DougBarbieri bella cattura, è una vecchia risposta, aggiornerò per citare npx, grazie!
Benja

18

Dopo ulteriori letture e la conferma di Linus G Thiel sopra, ho scoperto che dovevo semplicemente,

  • Downgrade a Node.js 0.6.12
  • E nemmeno,
    • Installa Mocha come globale
    • Aggiungi ./node_modules/.binal mioPATH

4
Ho il nodo 0.8.12 e mocha installati sia a livello globale che locale (per progetti diversi) e funzionano. Quindi non è necessario eseguire il downgrade del nodo. Per mocha installato localmente, assicurati che il tuo PATH sia impostato come sopra, o chiamalo direttamente dal tuo script (Makefile o tag "scripts").
Qichao Dong,

1
Avevo installato Mocha localmente e globalmente ma non è stato trovato nel percorso (Win8). Ho dovuto aggiungere manualmente la cartella "./node_modules/.bin" relativa al mio progetto al mio PERCORSO, riavviare la console quindi digitare "mocha" avrebbe funzionato. Non è l'ideale, ma un trucco veloce per farlo funzionare. Forse se avessi una posizione di primo livello per installare mocha localmente, quindi collegarti a quel PERCORSO in modo da poterlo utilizzare altrove.
Ali

1

Per Windows:

Package.json

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

quindi eseguire il comando

npm run test

1

Durante l'installazione dei moduli del nodo per mocha avevo provato i seguenti comandi

  • npm install
  • npm installa mocha
  • npm install --save-dev mocha
  • npm install mocha -g # per installarlo anche a livello globale

e durante l'esecuzione o l'esecuzione del test moka che stavo provando

  • moka test
  • npm run test
  • mocha test test \ index.test.js
  • test npm

ma stavo ottenendo il seguente errore come:

"Mocha" non è riconosciuto come comando interno o esterno

Quindi, dopo aver provato tutto, è risultato che il percorso delle variabili di ambiente sotto le variabili di sistema è stato impostato come:

C: \ Programmi \ nodejs \

e ha funzionato :)


0

Per eseguire Mocha con il mochacomando dal tuo terminale devi installare mocha globalmente sulla thismacchina:

npm install --global mocha

Quindi cdnella cartella del progetto / prova ed eseguimocha yourTestFileName.js


Se vuoi rendere mochadisponibile all'interno della tua package.jsondipendenza come sviluppo:

npm install --save-dev mocha

Quindi aggiungi mochaai tuoi script all'interno package.json.

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

Quindi corri npm testnel tuo terminale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.