Mocha intenta encontrar archivos de prueba en test
forma predeterminada, ¿cómo puedo especificar otro directorio, por ejemplo server-test
?
Mocha intenta encontrar archivos de prueba en test
forma predeterminada, ¿cómo puedo especificar otro directorio, por ejemplo server-test
?
Respuestas:
Editar: esta opción está en desuso: https://mochajs.org/#mochaopts
Si desea hacerlo simplemente ejecutando mocha
en la línea de comandos, pero desea ejecutar las pruebas en una carpeta en ./server-tests
lugar de hacerlo ./test
, cree un archivo ./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 comando, por lo que hacer que la primera línea sea solo el directorio en el que desea cambiar las pruebas también redirigirá desde ./test/
mocha.opts
archivo se puede colocar donde desee, y luego simplemente ejecutar mocha
especificar la ruta a su archivo de configuración a través de, por ejemplo:mocha --opts ./mocha.opts
Utilizar este:
mocha server-test
O si tiene subdirectorios, use esto:
mocha "server-test/**/*.js"
Tenga en cuenta el uso de comillas dobles. Si los omite, es posible que no pueda ejecutar pruebas en subdirectorios.
mocha test/server-test
mocha ./**/*.test.js
(para poder colocar el archivo de prueba con el archivo del módulo). El patrón dejó de funcionar para mí cuando agregué un archivo de prueba en un nivel diferente en la jerarquía de archivos que el resto de las pruebas, y solo encontré ese archivo de bola impar y no la docena de otros que vivían en el mismo nivel en la jerarquía . Envolviendo entre comillas lo arregló.
--recursive
como explico más adelante
Aquí hay una manera, si tiene subcarpetas en su carpeta de prueba, por ejemplo
/test
/test/server-test
/test/other-test
Luego, en Linux, puede usar el comando find para enumerar todos los archivos * .js de forma recursiva y pasarlo a mocha:
mocha $(find test -name '*.js')
--recursive
como explico más adelante
mocha
no tiene la opción de establecer la estructura de directorios deseada en la configuración?
La buena manera de hacer esto es agregar un script npm de "prueba" en package.json que llame a mocha con los argumentos correctos. De esta manera, su package.json también describe su estructura de 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"
},
Luego, para ejecutar solo las pruebas de humo, llame al:
npm test
Puede estandarizar la ejecución de todas las pruebas en todos los proyectos de esta manera, de modo que cuando un nuevo desarrollador comience en su proyecto u otro, sepan que "npm test" ejecutará las pruebas. Hay una buena precedencia histórica para esto (Maven, por ejemplo, la mayoría de los proyectos "make" de la vieja escuela también). Seguro 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 desee que ejecute mocha:
"scripts": {
"test": "mocha test/**/*.js"
"smoketest": "mocha smoketest/**/*.js"
},
Luego, para ejecutar solo las pruebas de humo, llame al:
npm smoketest
Otro patrón común es colocar sus pruebas en el mismo directorio que la fuente que prueban, pero llame 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í? Bueno. :) La consistencia derrota a mura .
No use la opción -g o --grep, ese patrón opera en el nombre de la prueba dentro de él (), no en el sistema de archivos. La documentación actual es engañosa y / o totalmente errónea al respecto. Para limitar todo el comando a una parte del sistema de archivos, puede pasar un patrón como último argumento (no es una bandera).
Por ejemplo, este comando configurará su reportero para especificaciones pero solo probará los archivos js inmediatamente dentro del directorio de prueba del servidor:
mocha --reporter spec server-test/*.js
Este comando hará lo mismo que anteriormente, 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
Si está en node.js , algunas configuraciones nuevas a partir de Mocha v6 :
Opción 1: crear .mocharc.json
en el directorio raíz del proyecto:
{
"spec": "path/to/test/files"
}
Opción 2: agregar mocha
propiedad en el proyecto package.json
:
{
...
"mocha": {
"spec": "path/to/test/files"
}
}
Más opciones están aquí .
Ejecute todos los archivos, test_directory
incluidos los subdirectorios que coincidantest.js
find ./parent_test_directory -name '*test.js' | xargs mocha -R spec
o use el --recursive
interruptor
mocha --recursive test_directory/
Tuve este problema en este momento y lo resolví eliminando la --recursive
opción (que había configurado) y usando la misma estructura sugerida anteriormente:
mochify "test/unit/**/*.js"
Esto ejecutó todas las pruebas en todos los directorios debajo /test/unit/
de mí mientras ignoraba los otros directorios dentro/test/
Hoy en día (año 2020) puede manejar esto usando el archivo de configuración mocha :
Paso 1: Cree el archivo .mocharc.js en la ubicación raíz de su aplicación
Paso 2: Agregue el siguiente código en el archivo de configuración de mocha:
'use strict';
module.exports = {
spec: 'src/app/**/*.test.js'
};
Para obtener más opciones en el archivo de configuración, consulte este enlace: https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js
Estoy en Windows 7 usando node.js v0.10.0 y mocha v1.8.2 y npm v1.2.14. Solo estaba tratando de obtener mocha para usar la prueba / unidad de ruta para encontrar mis pruebas, después de pasar mucho tiempo e intentar varias cosas, aterricé,
El uso de la opción "test / unit / *. Js" no funciona en Windows. Por buenas razones, el shell de Windows no expande comodines como Unixen.
Sin embargo, el uso de "prueba / unidad" funciona, sin el patrón de archivo. p.ej. "prueba / unidad de mocha" ejecuta todos los archivos encontrados en la carpeta de prueba / unidad.
Esto solo ejecuta archivos de una carpeta como pruebas, pero puede pasar varios nombres de directorio como parámetros.
Además, para ejecutar un solo archivo de prueba, puede especificar la ruta completa y el nombre de archivo. p.ej. "prueba de mocha / unidad / mytest1.js"
Realmente configuré en package.json para npm "scripts": {"test": "mocha test / unit"},
Entonces esa 'prueba npm' ejecuta las pruebas de mi unidad.
--recursive
opción como la siguiente:mocha --recursive "some_dir"
node_modules\.bin\mocha "test\unit\*.js"
trabajos en Windows. También node_modules\.bin\mocha "**\*.js"
funciona (mi caso real). Pero estoy buscando una manera de excluir el directorio node_modules . (También uso gulpfile.js, pero en algún momento necesito iniciar la prueba directamente con mocha)
Si está utilizando nodejs
, en su package.json
bajoscripts
global (-g)
instalaciones: "test": "mocha server-test"
o "test": "mocha server-test/**/*.js"
para subdocumentosproject
instalaciones: "test": "node_modules/mocha/bin/mocha server-test"
o "test": "node_modules/mocha/bin/mocha server-test/**/*.js"
para subdocumentosLuego simplemente ejecuta tus pruebas normalmente como npm test
npm run mocha "./test/*.spec.js!(~)"
ignora el argumento pegote, pero node_modules/.bin/mocha "./test/*.spec.js!(~)"
no lo hace.
npm run mocha -- yourArgs
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.
Como sugirió @ jeff-dickey, en la raíz de su proyecto, cree una carpeta llamada test
. En esa carpeta, cree un archivo llamado mocha.opts
. Ahora, cuando trato de mejorar la respuesta de Jeff, lo que funcionó para mí fue en lugar de especificar el nombre de una sola carpeta de prueba, especifiqué un patrón para encontrar todas las pruebas para ejecutar en mi proyecto agregando esta línea:
*/tests/*.js --recursive
en mocha.opts
Si, en cambio, desea especificar las carpetas exactas para buscar pruebas, hice algo como esto:
shared/tests/*.js --recursive
server/tests/graph/*.js --recursive
Espero que esto ayude a cualquiera que necesite más de lo que proporcionan las otras respuestas
.only
y.skip
administrar qué pruebas estan corriendo. Importante durante el desarrollo de una función específica cuando no desea esperar a que todo el conjunto de pruebas se ejecute todo el tiempo.