Estoy enviando una solicitud de red en un caso de prueba, pero esto a veces lleva más de 2 segundos (el tiempo de espera predeterminado).
¿Cómo aumento el tiempo de espera para un solo caso de prueba?
Estoy enviando una solicitud de red en un caso de prueba, pero esto a veces lleva más de 2 segundos (el tiempo de espera predeterminado).
¿Cómo aumento el tiempo de espera para un solo caso de prueba?
Respuestas:
Aquí tienes: http://mochajs.org/#test-level
it('accesses the network', function(done){
this.timeout(500);
[Put network code here, with done() in the callback]
})
Para la función de flecha, utilice lo siguiente:
it('accesses the network', (done) => {
[Put network code here, with done() in the callback]
}).timeout(500);
before(function(done){this.timeout(5 * 1000);...});
.timeout(500)
al final deit(...).timeout(500)
Si desea utilizar las funciones de flecha es6, puede agregar un .timeout(ms)
al final de su it
definición:
it('should not timeout', (done) => {
doLongThing().then(() => {
done();
});
}).timeout(5000);
Al menos esto funciona en mecanografiado.
.timeout
no está incluido en las tipificaciones DefinitelyTyped para mocha: i.imgur.com/jQbWCn1.png - Usar this.timeout(2000)
o this.slow(500)
con una función antigua normal funciona y se compila sin errores
it
, no funciona describe
.
describe()
o context()
?
.timeout
se incluye ahora en tipificaciones de Mocha DefinitelyTyped en: Mocha.IRunnable
. Sin embargo, si está utilizando el IDE de Webstorm para ejecutar estas pruebas, una nota de precaución: por cualquier razón, el complemento de integración Mocha de WebStorm todavía no reconoce las pruebas Mocha con .timeout()
adjuntas (lo que significa que no aparece el botón 'ejecutar' junto a ellas), y por eso abogo por evitar las funciones de flecha para permitir el uso de en su this.timeout()
lugar.
(desde que me encontré con esto hoy)
Tenga cuidado al usar la sintaxis de flecha de grasa ES2015:
Esto fallará:
it('accesses the network', done => {
this.timeout(500); // will not work
// *this* binding refers to parent function scope in fat arrow functions!
// i.e. the *this* object of the describe function
done();
});
EDITAR: Por qué falla:
Como @atoth menciones en los comentarios, las flechas de grasa funciones no tienen su propia esta unión. Por lo tanto, no es posible que la función it se una a esta devolución de llamada y proporcione una función de tiempo de espera .
En pocas palabras : no utilice las funciones de flecha para las funciones que necesitan un mayor tiempo de espera.
this
enlace en las funciones de flecha, no de la misma manera sugeriría que tienen algún tipo de, simplemente diferente. Solo tienen ámbitos léxicos. No puede vincular esto no existente. Por eso .bind
, .call
etc. no funciona con él.
this
es.
Si está utilizando NodeJS, puede configurar el tiempo de espera en package.json
"test": "mocha --timeout 10000"
entonces puedes ejecutar usando npm como:
npm test
También puede pensar en adoptar un enfoque diferente y reemplazar la llamada al recurso de red con un trozo o un objeto simulado. Con Sinon , puede desacoplar la aplicación del servicio de red, enfocando sus esfuerzos de desarrollo.
Para navegación de prueba en Express
:
const request = require('supertest');
const server = require('../bin/www');
describe('navegation', () => {
it('login page', function(done) {
this.timeout(4000);
const timeOut = setTimeout(done, 3500);
request(server)
.get('/login')
.expect(200)
.then(res => {
res.text.should.include('Login');
clearTimeout(timeOut);
done();
})
.catch(err => {
console.log(this.test.fullTitle(), err);
clearTimeout(timeOut);
done(err);
});
});
});
En el ejemplo, el tiempo de prueba es 4000 (4s).
Nota: setTimeout(done, 3500)
es menor de lo que done
se llama dentro del tiempo de la prueba, pero clearTimeout(timeOut)
evita que se use todo este tiempo.
¡Esto funcionó para mí! No se pudo encontrar nada para que funcione antes ()
describe("When in a long running test", () => {
it("Should not time out with 2000ms", async () => {
let service = new SomeService();
let result = await service.callToLongRunningProcess();
expect(result).to.be.true;
}).timeout(10000); // Custom Timeout
});