¿Cómo especificar el directorio de prueba para mocha?


Mocha intenta encontrar archivos de prueba en test por defecto, ¿cómo puedo especificar otro dir, por ejemplo server-test?

Author: Cory House, 2012-05-25

12 answers

Aquí hay una forma, si tiene subcarpetas en su carpeta de prueba, por ejemplo,

/test
/test/server-test
/test/other-test

Entonces en Linux puede usar el comando find para listar todos *.archivos js recursivamente y pasarlo a mocha:

mocha $(find test -name '*.js')
 71
Author: 250R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-25 12:17:37

Usa esto:

mocha server-test

O si tiene subdirectorios use esto:

mocha "server-test/**/*.js"

Tenga en cuenta el uso de comillas dobles. Si las omite, es posible que no pueda ejecutar pruebas en subdirectorios.

 227
Author: Behrang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-11 09:04:29

Si desea hacerlo simplemente ejecutando mocha en la línea de comandos, pero quería ejecutar las pruebas en una carpeta ./server-tests en lugar de ./test, cree un archivo en ./test/mocha.opts con solo esto en el archivo:

server-tests

Si desea ejecutar todo en esa carpeta y subdirectorios, ponga esto en test/mocha.opts

server-tests
--recursive

mocha.opts son los argumentos pasados a través de la línea de comandos, por lo que hacer la primera línea solo el directorio que desea cambiar las pruebas también redirigirá desde ./test/

 107
Author: Jeff Dickey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-06 01:36:01

No use la opción-g o gre grep, ese patrón opera en el nombre de la prueba dentro de it(), no en el sistema de archivos. La documentación actual es engañosa y / o totalmente errónea al respecto. Para limitar el comando completo a una parte del sistema de archivos, puede pasar un patrón como último argumento (no es una bandera).

Por ejemplo, este comando establecerá su reporter en spec pero solo probará archivos js inmediatamente dentro del directorio server-test:

mocha --reporter spec server-test/*.js

Esto el comando hará lo mismo que el anterior, además solo ejecutará los casos de prueba donde la cadena/definición it() de una prueba comienza con " Fnord:":

mocha --reporter spec --grep "Fnord:" server-test/*.js
 27
Author: Egg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-24 23:26:33

Ejecute todos los archivos en test_directory incluyendo subdirectorios que coincidan con test.js

find ./parent_test_directory -name '*test.js' | xargs mocha -R spec

O utilice el interruptor --recursive

mocha --recursive test_directory/
 14
Author: Anthony Awuley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-15 17:26:47

Acabo de tener este problema y lo resolví eliminando la opción --recursive (que había establecido) y usando la misma estructura sugerida anteriormente:

mochify "test/unit/**/*.js"

Esto ejecutó todas las pruebas en todos los directorios bajo /test/unit/ para mí mientras ignoraba los otros directorios dentro de /test/

 9
Author: jfunk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-23 14:21:24

La buena manera de hacer esto es agregar un script npm "test" en el paquete.json que llama mocha con los argumentos correctos. Por aquí tu paquete.json también describe la estructura de la prueba. También evita todos estos problemas multiplataforma en las otras respuestas (comillas dobles vs simples, "buscar", etc.)

Para que mocha ejecute todos los archivos js en el directorio "test":

"scripts": {
    "start": "node ./bin/www", -- not required for tests, just here for context
    "test": "mocha test/**/*.js"
  },

Entonces para ejecutar solo las pruebas de humo llame:

npm test

Puede estandarizar la ejecución de todas las pruebas en todos los proyectos de esta manera, cuando un nuevo desarrollador comienza en su proyecto u otro, saben que "npm test" ejecutará las pruebas. Hay un buen precedente histórico para esto (Maven, por ejemplo, la mayoría de los proyectos "make" de la vieja escuela también). Seguro que ayuda a CI cuando todos los proyectos tienen el mismo comando de prueba.

Del mismo modo, es posible que tenga un subconjunto de pruebas de "humo" más rápidas que podría querer que se ejecute mocha:

"scripts": {
    "test": "mocha test/**/*.js"
    "smoketest": "mocha smoketest/**/*.js"
  },

Entonces para ejecutar solo las pruebas de humo llame:

npm smoketest

Otro patrón común es colocar su pruebas en el mismo directorio que la fuente que prueban, pero llaman a los archivos de prueba *.spec.js. Por ejemplo: src/foo/foo.js es probado por src / foo / foo.spec.js.

Para ejecutar todas las pruebas llamadas *.spec.js por convención:

  "scripts": {
    "test": "mocha **/*.spec.js"
  },

Luego para ejecutar todas las pruebas llame:

npm test

¿Ves el patrón aquí? Bien. :) Consistencia derrota mura.

 3
Author: Michael Bushe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-18 05:22:26

Estoy en Windows 7 usando node.js v0.10.0 and mocha v1.8.2 and npm v1.2.14. Yo sólo estaba tratando de conseguir mocha para utilizar la ruta de prueba / unidad para encontrar mis pruebas, Después de pasar mucho tiempo y probar varias cosas aterricé,

Utilizando "test/unit/*.la opción " js " no funciona en Windows. Por buenas razones, Windows shell no expande comodines como unixen.

Sin embargo, usar "test/unit" funciona, sin el patrón de archivo. eg. "mocha test / unit" ejecuta todos los archivos encontrados en test / unit carpeta.

Esto solo ejecuta una carpeta de archivos como pruebas, pero puede pasar varios nombres de directorio como parámetros.

También para ejecutar un solo archivo de prueba puede especificar la ruta completa y el nombre del archivo. eg. "mocha test / unit / mytest1.js "

Realmente configuré en paquete.json for npm "guiones": { "prueba": "prueba mocha/unidad" },

Para que 'npm test' ejecute mis pruebas unitarias.

 2
Author: Robin Luiten,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-18 13:31:58

Si está utilizando nodejs, en su package.json bajo scripts

  1. Para global (-g) instalaciones: "test": "mocha server-test" o "test": "mocha server-test/**/*.js" para subdocumentos
  2. Para project instalaciones: "test": "node_modules/mocha/bin/mocha server-test" o "test": "node_modules/mocha/bin/mocha server-test/**/*.js" para subdocumentos

Luego simplemente ejecute sus pruebas normalmente como npm test

 2
Author: Cozzbie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-02 10:56:36

Esto no parece ser un soporte "fácil" para cambiar el directorio de prueba.
Sin embargo, tal vez debería echar un vistazo a este problema, en relación con su pregunta.

 1
Author: Pierre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-25 12:08:35

Como menciona @ superjos en los comentarios use

mocha --recursive "some_dir"

 1
Author: avck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-25 11:53:14

Como @jeff-dickey sugirió, en la raíz de tu proyecto, crea una carpeta llamada test. En esa carpeta, crea un archivo llamado mocha.opts. Ahora, donde intento mejorar la respuesta de Jeff, lo que funcionó para mí fue que en lugar de especificar el nombre de una sola carpeta de prueba, especificé un patrón para encontrar todas las pruebas que se ejecutarán en mi proyecto agregando esta línea:

*/tests/*.js --recursive en mocha.opts

Si en su lugar desea especificar las carpetas exactas para buscar pruebas, hice algo como esto:

shared/tests/*.js --recursive
server/tests/graph/*.js --recursive

Espero esto ayuda a cualquier persona que necesite más de lo que las otras respuestas proporcionan

 0
Author: lwdthe1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-29 15:22:17