Cambiar el tiempo de espera predeterminado para mocha


161

Si tenemos un archivo de prueba de unidad my-spec.js y se ejecuta con mocha:

mocha my-spec.js

El tiempo de espera predeterminado será de 2000 ms. Se puede sobrescribir para una prueba parcial con un parámetro de línea de comando:

mocha my-spec.js --timeout 5000

¿Es posible cambiar el tiempo de espera predeterminado globalmente para todas las pruebas? es decir, el valor de tiempo de espera predeterminado será diferente de 2000 ms cuando llame a:

mocha my-spec.js

El sitio web oficial de Mocha también explica más sobre esto.
RaviRokkam

Respuestas:


305

Por defecto, Mocha leerá un archivo llamado test/mocha.optsque puede contener argumentos de línea de comando. Entonces podría crear un archivo que contenga:

--timeout 5000

Cada vez que ejecute Mocha en la línea de comando, leerá este archivo y establecerá un tiempo de espera de 5 segundos de forma predeterminada.

Otra forma que puede ser mejor dependiendo de su situación es configurarlo así en una describellamada de nivel superior en su archivo de prueba:

describe("something", function () {
    this.timeout(5000); 

    // tests...
});

Esto le permitiría establecer un tiempo de espera solo por archivo.

Puede usar ambos métodos si desea un valor predeterminado global de 5000 pero establecer algo diferente para algunos archivos.


Tenga en cuenta que, por lo general, no puede usar una función de flecha si va a llamar this.timeout(o acceder a cualquier otro miembro de thisese Mocha configurado por usted). Por ejemplo, esto generalmente no funcionará :

describe("something", () => {
    this.timeout(5000); //will not work

    // tests...
});

Esto se debe a que una función de flecha toma thisdel ámbito en el que aparece la función. Mocha llamará a la función con un buen valor thispero ese valor no se pasa dentro de la función de flecha. La documentación para Mocha dice sobre este tema :

Se desaconseja pasar funciones de flecha ("lambdas") a Mocha. Debido al enlace léxico de esto, tales funciones no pueden acceder al contexto Mocha.


1
Gracias por la información. Pero intenté modificar el archivo mocha.opts, pero no afecta.
lm.

2
¿Lo creaste en el lugar correcto? Mocha es muy específico sobre dónde quiere este archivo. Si ejecuta Mocha, /home/me/src/proj/entonces Mocha buscará este archivo:/home/me/src/proj/test/mocha.opts
Louis

Muchas gracias . Ahora el cambio afectó
lm.

this.timeout (10000); // tiempo de espera predeterminado ^ TypeError: this.timeout no es una función en Suite. <anónimo> (/Users/jeff.l/Documents/workspace/unit-tests/mocha-chai_tests/checkoutTest.js:12:10)
Jeff Lowery

66
@JeffLowery ¿Estás utilizando una función de flecha? Las funciones de flecha no establecen una nueva this, que generalmente da this.timeoutcomo resultado un error como se muestra en su comentario.
Louis

62

Simplemente agregando a la respuesta correcta, puede establecer el tiempo de espera con la función de flecha de esta manera:

it('Some test', () => {

}).timeout(5000)

77
La pregunta es "cambiar el tiempo de espera predeterminado globalmente para todas las pruebas". Su respuesta solo cambia una prueba. describe('suite', () => {...}).timeout(5000)no funciona
aleung

Como en la respuesta anterior, la solución propuesta es actualmente ineficaz. mochajs.org/#timeouts le dice que inserte setTimeoutinstrucciones explícitas dentro de las pruebas.
Marco Faustinelli

esto funcionó para mí con mocha @ 5 (para una prueba específica)
Fernando Gabrieli

@MarcoFaustinelli Estás malentendido los documentos. Los setTimeouts no tienen nada que ver con Mocha. Están allí para demostrar los efectos de la configuración del tiempo de espera.
oligofren

33

Agregando esto para completar. Si (como yo) usa un script en su package.jsonarchivo, simplemente agregue la --timeoutopción a mocha:

"scripts": {
  "test": "mocha 'test/**/*.js' --timeout 10000",
  "test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},

Luego puede ejecutar npm run testpara ejecutar su conjunto de pruebas con el tiempo de espera establecido en 10,000 milisegundos.


En caso de que alguien esté interesado, la mayoría de los IDE también le permiten inyectar opciones de mocha para la ejecución de la prueba; por ejemplo, para WebStorm, puede ingresar esto (es decir, "- timeout 10000") en Ejecutar-> Editar configuraciones-> Opciones adicionales de Mocha.
Rubicon

25

En las versiones actuales de Mocha, el tiempo de espera se puede cambiar globalmente de esta manera:

mocha.timeout(5000);

Simplemente agregue la línea de arriba en cualquier parte de su conjunto de pruebas, preferiblemente en la parte superior de su especificación o en un asistente de prueba separado.


En versiones anteriores, y solo en un navegador, puede cambiar la configuración global mediante mocha.setup.

mocha.setup({ timeout: 5000 });

La documentación no cubre la configuración del tiempo de espera global, pero ofrece algunos ejemplos sobre cómo cambiar el tiempo de espera en otros escenarios comunes.


55
Esto no funciona en Node. Consulte stackoverflow.com/a/47915119/893113 . Parece que la opción CLI es la única forma.
paulmelnikow

Yo tampoco trabajo en el navegador. A partir de hoy, la documentación vinculada en la respuesta no menciona ningún timeoutparámetro. Por el contrario, mochajs.org/#timeouts le dice que inserte setTimeoutinstrucciones explícitas dentro de las pruebas.
Marco Faustinelli

@MarcoFaustinelli Estás malentendido los documentos. Los setTimeouts no tienen nada que ver con Mocha. Están allí para demostrar los efectos de la configuración del tiempo de espera.
oligofren
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.