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

219

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

Viento libre
fuente
Si bien no es 100% una respuesta a su pregunta, consulte jaketrent.com/post/run-single-mocha-test . Vine aquí para buscar cómo ejecutar un conjunto de pruebas específico y esto muestra que puede usar .onlyy .skipadministrar 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.
Dave Sag

Respuestas:

141

Editar: esta opción está en desuso: https://mochajs.org/#mochaopts


Si desea hacerlo simplemente ejecutando mochaen la línea de comandos, pero desea ejecutar las pruebas en una carpeta en ./server-testslugar de hacerlo ./test, cree un archivo ./test/mocha.optscon 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/

Jeff Dickey
fuente
12
Esta es la opción con la menor fricción, y debería ser la respuesta aceptada en mi humilde opinión
Nick Tomlin
Estoy usando una de las placas de caldera y en la siguiente línea, puede ser debido a Windows, ¿puede verificar una vez.node ./node_modules/mocha/bin/mocha $ (encuentre api -name '* -test.js') --compiladores js: babel-core / register
kobe
1
una gema, también juega muy bien con las configuraciones de depuración de mocha de Webstorm IDE, solo seleccione "patrones de archivo" y deje la entrada vacía, y usará mocha.opts
danday74
3
Esa es sin duda la mejor respuesta. Lo más probable es que valdría la pena añadir en su respuesta también que el mocha.optsarchivo se puede colocar donde desee, y luego simplemente ejecutar mochaespecificar la ruta a su archivo de configuración a través de, por ejemplo:mocha --opts ./mocha.opts
quirimmo
1
también puede poner --recursive en la línea de comandos de mocha, útil si define el script de prueba en su paquete.json
unludo
282

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.

Behrang
fuente
1
Esto no funciona para mi. Si deseo hacerlo de esta manera, tengo que hacerlomocha test/server-test
Jonnie
22
¡El tema de las comillas dobles me tuvo por siglos! Gracias por salvar mi cordura. Un agradecimiento a todos los que lean esto para que presten especial atención a esas comillas dobles.
ctrlplusb
11
En mi caso, estaba usando 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ó.
Stoutie
1
o simplemente utilizar --recursivecomo explico más adelante
Jeff Dickey
44
Esta debería ser la respuesta! Las comillas dobles me salvan
Minh Thai
81

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')
250R
fuente
29
o simplemente utilizar --recursivecomo explico más adelante
Jeff Dickey
55
Entonces, en otras palabras, ¿ mochano tiene la opción de establecer la estructura de directorios deseada en la configuración?
Verde
usuario cliente $ mocha $ (buscar pruebas -name '* .js') -bash: mocha: comando no encontrado; Obteniendo este error.
lft93ryt
1
Esto es demasiado complicado y engañoso. Prefiere las opciones de mocha en lugar de usar un comando del sistema operativo.
Michael Bushe
tu post no responder a la pregunta
ekkis
30

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 .

Michael Bushe
fuente
Esta es la forma más precisa de hacerlo, supongo.
ArturS
29

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
gregtczap
fuente
22

Si está en node.js , algunas configuraciones nuevas a partir de Mocha v6 :

Opción 1: crear .mocharc.jsonen el directorio raíz del proyecto:

{
  "spec": "path/to/test/files"
}

Opción 2: agregar mochapropiedad en el proyecto package.json:

{
  ...

  "mocha": {
    "spec": "path/to/test/files"
  }
}

Más opciones están aquí .

campo temático
fuente
20

Ejecute todos los archivos, test_directoryincluidos los subdirectorios que coincidantest.js

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

o use el --recursiveinterruptor

mocha --recursive test_directory/
Anthony Awuley
fuente
11

Tuve este problema en este momento y lo resolví eliminando la --recursiveopció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/

jfunk
fuente
9

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

rajeshchauhan23102008
fuente
3

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.

Robin Luiten
fuente
11
A partir de hoy, uno puede usar la --recursiveopción como la siguiente:mocha --recursive "some_dir"
superjos
3
Utilizando 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)
Alex 75
3

Si está utilizando nodejs, en su package.jsonbajoscripts

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

Luego simplemente ejecuta tus pruebas normalmente como npm test

Cozzbie
fuente
Estoy encontrando que npm run mocha "./test/*.spec.js!(~)"ignora el argumento pegote, pero node_modules/.bin/mocha "./test/*.spec.js!(~)"no lo hace.
ironchicken
@ironchicken para pasar argumentos de "npm run" use - como ennpm run mocha -- yourArgs
Pedro A
3

Como mencionó @superjos en los comentarios, use

mocha --recursive "some_dir"

avck
fuente
2

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.

Pierre
fuente
2

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

lwdthe1
fuente