Comment installer et exécuter Mocha, le module de test Node.js? Obtenir «mocha: commande non trouvée» après l'installation

89

J'ai du mal à faire fonctionner Mocha comme prévu, et j'aimerais le dire comme documenté, mais il (semble) qu'il n'y ait pas beaucoup de documentation sur le fonctionnement réel de la chose.

Je l'ai installé en utilisant npm(à la fois globalement et localement), et chaque fois que je l'exécute, j'obtiens:

$ mocha
mocha: command not found

Ok, alors j'ai pensé que ce n'était pas dans mon PATH, alors j'ai essayé de l'exécuter directement,

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

Enfin, j'ai essayé de frapper l'autre binfichier et j'ai obtenu,

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

  .

   1 tests complete (1ms)

Comment puis-je simplement exécuter mes tests avec une seule commande? Les vœux semblent vous laisser, mais j'ai entendu dire que Mocha est le meilleur choix, je n'arrive tout simplement pas à le faire fonctionner correctement.

Et des pensées sur l'erreur que j'ai obtenue ci-dessus lors de ma troisième tentative?

Éditer:

Je suis entrain de courir,

  • Ubuntu 11.10 64 bits
  • Node.js 0.7.5
  • npm 1.1.8
  • moka 0.14.1
  • devrait 0.6.0
Stephen Melrose
la source
2
Avec le nœud 0.6.12, npm 1.1.4 et en cours d'exécution npm install mocha, j'obtiens ./node_modules/.bin/mochacomme prévu. sudo npm install -g mochame reçoit /usr/local/bin/mocha. Si cela ne fonctionne pas correctement dans votre environnement, cela peut être un bogue, ou simplement mocha non mis à jour pour prendre en charge le nœud 0.7. *. Concernant votre avertissement d'obsolescence, existset existsSyncont été déplacés de pathà fsdans le nœud 0.7.1.
Linus Thiel
J'ai rétrogradé à Node.js 0.6.12, ajouté "./node_modules/.bin" à mon PATH, et tout va bien avec le monde.
Stephen Melrose

Réponses:

177

depuis npm 5.2.0, il y a une nouvelle commande "npx" incluse avec npm qui rend cela beaucoup plus simple, si vous exécutez:

npx mocha <args>

Remarque: les arguments optionnels sont transmis à la commande en cours d'exécution (mocha dans ce cas)

cela sélectionnera automatiquement la commande exécutable "mocha" de votre mocha installé localement (ajoutez-la toujours en tant que dépendance de développement pour vous assurer que la bonne est toujours utilisée par vous et tout le monde).

Attention cependant que si vous n'avez pas installé mocha, cette commande récupérera et utilisera automatiquement la dernière version, ce qui est excellent pour certains outils (comme les échafaudages par exemple), mais peut ne pas être la plus recommandée pour certaines dépendances où vous voudrez peut-être épingler à une version spécifique.

Vous pouvez en savoir plus sur npx ici


Maintenant, si au lieu d'appeler directement mocha, vous voulez définir un script npm personnalisé, un alias qui pourrait appeler d'autres binaires npm ...

vous ne voulez pas que les tests de votre bibliothèque échouent en fonction de la configuration de la machine (mocha en tant que version globale, mocha globale, etc.), la façon d'utiliser le mocha local qui fonctionne sur plusieurs plates-formes est:

node node_modules/.bin/mocha

npm met des alias pour tous les binaires de vos dépendances sur ce dossier spécial. Enfin, npm ajoutera automatiquement node_modules / .bin au PATH lors de l'exécution d'un script npm, donc dans votre package.json, vous pouvez simplement faire:

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

et invoquez-le avec

npm test
Benja
la source
1
+1, j'utilise du moka il y a quelque temps, mais je ne m'en suis pas rendu compte. Cela devrait être la réponse acceptée!
gihanchanuka
6
@ michael.kebe non, vous n'avez pas besoin de spécifier ce chemin pour utiliser le mocha local, npm ajoute déjà "./node_modules/.bin" au $ PATH, donc il utilisera la version locale par défaut.
Benja
Je pense que la commande doit être node_modules / mocha / bin / mocha et non node_modules_noeud / .bin / mocha
Mina Luke
3
@MinaLuke qui fonctionne aussi mais c'est une mauvaise idée, /node_modules/.bin/{module-binary-name}c'est l'endroit où npm met des raccourcis vers les binaires dans vos dépendances, vous ne devriez pas référencer directement un fichier dans les sources d'une dépendance, car cela pourrait casser sur la prochaine version.
Benja
1
@DougBarbieri belle prise, c'est une vieille réponse, je vais mettre à jour pour mentionner npx, merci!
Benja
18

Après une lecture plus approfondie et la confirmation de Linus G Thiel ci-dessus, j'ai découvert que je devais simplement,

  • Revenir à Node.js 0.6.12
  • Et non plus,
    • Installez Mocha comme global
    • Ajouter ./node_modules/.binà monPATH
Stephen Melrose
la source
4
J'ai le nœud 0.8.12 et mocha installés globalement et localement (pour différents projets), et ils fonctionnent. Donc pas besoin de rétrograder le nœud. Pour mocha installé localement, assurez-vous simplement que votre PATH est défini comme ci-dessus, ou appelez-le directement depuis votre script (Makefile ou balise «scripts»).
Qichao Dong
1
J'ai installé Mocha localement et globalement mais il n'a pas été trouvé dans le chemin (Win8). J'ai dû ajouter manuellement le dossier './node_modules/.bin' relatif à mon projet à mon PATH, redémarrer la console puis taper 'mocha' fonctionnerait. Pas idéal, mais un hack rapide pour le faire fonctionner. Peut-être que si vous aviez un emplacement de niveau supérieur pour installer mocha localement, créez un lien vers ce PATH afin que vous puissiez l'utiliser ailleurs.
Ali
1

Pour les fenêtres :

Package.json

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

puis exécutez la commande

npm run test
Ashutosh Jha
la source
1

Lors de l'installation des modules de nœuds pour mocha, j'avais essayé les commandes ci-dessous

  • npm installer
  • npm installer moka
  • npm install --save-dev mocha
  • npm install mocha -g # pour l'installer globalement également

et en exécutant ou en exécutant le test moka que j'essayais

  • test de moka
  • test d'exécution npm
  • test de test moka \ index.test.js
  • test npm

mais j'obtenais l'erreur ci-dessous comme:

'Mocha' n'est pas reconnu comme commande interne ou externe

Ainsi, après avoir tout essayé, il s'est avéré qu'il s'agissait simplement de définir le chemin des variables d'environnement sous les variables système comme suit:

C: \ Program Files \ nodejs \

et cela a fonctionné :)

DHEERAJ
la source