¿Cómo se instala y ejecuta Mocha, el módulo de prueba de Node.js? Obteniendo "mocha: comando no encontrado" después de la instalación


90

Tengo problemas para hacer que Mocha funcione como se esperaba, y me encantaría decirlo como está documentado, pero (parece) que no hay mucha documentación sobre cómo hacer que funcione.

Lo instalé usando npm(tanto global como localmente), y cada vez que lo ejecuto obtengo:

$ mocha
mocha: command not found

Ok, pensé que no estaba en mi PATH, así que intenté ejecutarlo directamente,

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

Finalmente, intenté presionar el otro binarchivo y obtuve,

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

  .

  ✔ 1 tests complete (1ms)

¿Cómo puedo ejecutar mis pruebas con un solo comando? Vows parece permitirte, pero he escuchado que Mocha es la mejor opción, simplemente parece que no puedo hacer que funcione correctamente.

¿Y alguna idea sobre el error que obtuve en mi tercer intento?

Editar:

Estoy corriendo,

  • Ubuntu 11.10 de 64 bits
  • Node.js 0.7.5
  • npm 1.1.8
  • moca 0.14.1
  • debería 0.6.0

2
Con el nodo 0.6.12, npm 1.1.4 y ejecutándose npm install mocha, obtengo el resultado ./node_modules/.bin/mochaesperado. sudo npm install -g mochame atrapa /usr/local/bin/mocha. Si esto no funciona correctamente en su entorno, podría ser un error, o simplemente mocha no se actualizó para admitir el nodo 0.7. *. En cuanto a su advertencia de desaprobación, existsy existsSyncfueron trasladados de pathque fsen el nodo 0.7.1.
Linus Thiel

Bajé a Node.js 0.6.12, agregué "./node_modules/.bin" a mi RUTA, y todo está bien en el mundo.
Stephen Melrose

Respuestas:


179

desde npm 5.2.0, hay un nuevo comando "npx" incluido con npm que lo hace mucho más simple, si ejecuta:

npx mocha <args>

Nota: los argumentos opcionales se envían al comando que se está ejecutando (mocha en este caso)

esto seleccionará automáticamente el comando ejecutable "mocha" de su mocha instalado localmente (siempre agréguelo como una dependencia de desarrollo para asegurarse de que usted y todos los demás usen siempre el correcto).

Sin embargo, tenga cuidado de que si no instaló mocha, este comando buscará y usará automáticamente la última versión, lo cual es excelente para algunas herramientas (como scaffolders, por ejemplo), pero puede que no sea el más recomendable para ciertas dependencias en las que podría querer pin a una versión específica.

Puede leer más sobre npx aquí


Ahora, si en lugar de invocar directamente a mocha, desea definir un script npm personalizado, un alias que podría invocar otros binarios npm ...

no desea que las pruebas de su biblioteca fallen dependiendo de la configuración de la máquina (mocha como global, versión global de mocha, etc.), la forma de usar el mocha local que funciona multiplataforma es:

node node_modules/.bin/mocha

npm pone alias a todos los binarios en sus dependencias en esa carpeta especial. Finalmente, npm agregará node_modules / .bin a la RUTA automáticamente cuando ejecute un script npm, por lo que en su package.json puede hacer simplemente:

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

e invocarlo con

npm test

1
+1, he estado usando moca desde hace algún tiempo, pero no me di cuenta. ¡Esta debería ser la respuesta aceptada!
gihanchanuka

6
@ michael.kebe no, no necesitas especificar esa ruta para usar el mocha local, npm ya agrega "./node_modules/.bin" al $ PATH, por lo que usará la versión local por defecto.
Benja

Creo que el comando debería ser node node_modules / mocha / bin / mocha no node node_modules / .bin / mocha
Mina Luke

3
@MinaLuke también funciona, pero es una mala idea, /node_modules/.bin/{module-binary-name}es el lugar donde npm coloca accesos directos a los binarios en sus dependencias, no debe hacer referencia directamente a un archivo en las fuentes de una dependencia, ya que eso podría fallar en la próxima versión.
Benja

1
@DougBarbieri buena captura, es una respuesta antigua, actualizaré para mencionar npx, ¡gracias!
Benja

18

Después de leer más y de la confirmación de Linus G Thiel arriba, descubrí que simplemente tenía que,

  • Cambiar a Node.js 0.6.12
  • Y también,
    • Instalar Mocha como global
    • Agregar ./node_modules/.bina miPATH

4
Tengo el nodo 0.8.12 y mocha instalados global y localmente (para diferentes proyectos), y están funcionando. Así que no es necesario degradar node. Para mocha instalado localmente, solo asegúrese de que su PATH esté configurado como arriba, o llámelo directamente desde su script (Makefile o etiqueta "scripts").
Qichao Dong

1
Tenía Mocha instalado local y globalmente, pero no se encontró en la ruta (Win8). Tuve que agregar manualmente la carpeta './node_modules/.bin' relativa a mi proyecto a mi PATH, reiniciar la consola y luego escribir 'mocha' funcionaría. No es ideal, pero es un truco rápido para que funcione. Quizás si tuviera una ubicación de nivel superior para instalar mocha localmente, entonces vincule a esa RUTA para poder usarla en otro lugar.
Ali

1

Para ventanas :

Package.json

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

luego ejecuta el comando

npm run test

1

Al instalar los módulos de nodo para mocha, probé los siguientes comandos

  • npm install
  • npm instalar mocha
  • npm install --save-dev mocha
  • npm install mocha -g # para instalarlo globalmente también

y al ejecutar o ejecutar la prueba de moka estaba probando

  • prueba de moca
  • prueba de ejecución npm
  • prueba de mocha prueba \ index.test.js
  • prueba npm

pero recibí el siguiente error como:

'Mocha' no se reconoce como comando interno o externo

Entonces, después de probar todo, resultó que simplemente establezca la ruta a las variables de entorno en las Variables del sistema como:

C: \ Archivos de programa \ nodejs \

Y funcionó :)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.