En mi aplicación de nodo, estoy usando mocha para probar mi código. Al llamar a muchas funciones asincrónicas usando mocha, obtengo un error de tiempo de espera ( Error: timeout of 2000ms exceeded.
). ¿Cómo puedo resolver esto?
var module = require('../lib/myModule');
var should = require('chai').should();
describe('Testing Module', function() {
it('Save Data', function(done) {
this.timeout(15000);
var data = {
a: 'aa',
b: 'bb'
};
module.save(data, function(err, res) {
should.not.exist(err);
done();
});
});
it('Get Data By Id', function(done) {
var id = "28ca9";
module.get(id, function(err, res) {
console.log(res);
should.not.exist(err);
done();
});
});
});
Respuestas:
Puede configurar el tiempo de espera al ejecutar su prueba:
O puede establecer el tiempo de espera para cada suite o cada prueba mediante programación:
Para más información ver los documentos .
fuente
-t
. si usa mocha-test para ejecutar mocha desde la tarea grunt, esto también es compatible con el objeto de opcionesoptions:{timeout:15000}
.TypeError: this.timeout is not a function
cuando se usa"mocha": "^3.5.0"
Me parece que la "solución" de solo aumentar los tiempos de espera oscurece lo que realmente está sucediendo aquí, que es
Por lo general, se encuentra con el n. ° 2 cuando Mocha no recibe errores de aserción de una devolución de llamada. Esto es causado por algún otro código que traga la excepción más arriba en la pila. La forma correcta de lidiar con esto es arreglar el código y no tragar el error .
Cuando el código externo se traga tus errores
En caso de que sea una función de biblioteca que no pueda modificar, debe detectar el error de aserción y pasarlo usted mismo a Mocha. Para ello, envuelva su devolución de llamada de aserción en un bloque try / catch y pase cualquier excepción al controlador hecho.
Por supuesto, esta placa repetitiva se puede extraer en alguna función de utilidad para hacer que la prueba sea un poco más agradable a la vista:
Acelerar las pruebas de red
Aparte de eso, le sugiero que siga los consejos sobre cómo comenzar a usar los talones de prueba para las llamadas de red para que las pruebas pasen sin tener que depender de una red en funcionamiento. Usando Mocha, Chai y Sinon, las pruebas podrían verse así
Vea los
nise
documentos de Sinon para más información.fuente
done()
al final de la promesa y ya me estoy burlando de las llamadas de red usando Angular$httpBackend
, pero no tuve suerte. Ajustar cada especificación con un try-catch no parece muy pragmático. ¿Cualquier otra sugerencia? ¡Gracias!try.... catch...
trabajo alrededor del error en el código bajo prueba en lugar de solucionarlo .Un poco tarde, pero alguien puede usar esto en el futuro ... Puede aumentar el tiempo de espera de la prueba actualizando los scripts en su package.json con lo siguiente:
"scripts": { "test": "test --timeout 10000" //Adjust to a value you need }
Ejecute sus pruebas usando el comando
test
fuente
Si está utilizando funciones de flecha:
fuente
Para mí, el problema era en realidad la función de descripción, que cuando se proporciona una función de flecha, hace que el mocha pierda el tiempo de espera y no se comporte de manera consistente. (Usando ES6)
como no se rechazó ninguna promesa, recibía este error todo el tiempo por diferentes pruebas que fallaban dentro del bloque de descripción
así es como se ve cuando no funciona correctamente:
y esto funciona usando la función anónima
Espero que ayude a alguien, mi configuración para lo anterior: (nodejs: 8.4.0, npm: 5.3.0, mocha: 3.3.0)
fuente
Mi problema no era devolver la respuesta, por lo que estaba colgando. Si está utilizando express, asegúrese de que res.send (datos), res.json (datos) o cualquier método de API que quiera usar se ejecute para la ruta que está probando.
fuente
Asegúrese de resolver / rechazar las promesas utilizadas en los casos de prueba, ya sean espías o trozos, asegúrese de que resuelvan / rechacen.
fuente