Comment augmenter le délai d’expiration d’un seul test dans mocha

Je soumets une requête réseau dans un scénario de test, mais cela prend parfois plus de 2 secondes (délai d’attente par défaut).

Comment puis-je augmenter le délai d’attente pour un seul cas de test?

Ici vous allez: http://mochajs.org/#test-level

it('accesses the network', function(done){ this.timeout(500); [Put network code here, with done() in the callback] }) 

Pour la fonction flèche, utilisez comme suit:

 it('accesses the network', (done) => { [Put network code here, with done() in the callback] }).timeout(500); 

Si vous souhaitez utiliser les fonctions de flèche es6, vous pouvez append un .timeout(ms) à la fin de votre définition:

 it('should not timeout', (done) => { doLongThing().then(() => { done(); }); }).timeout(5000); 

Au moins cela fonctionne dans Typescript.

(depuis que je suis tombé dessus aujourd’hui)

Soyez prudent lorsque vous utilisez la syntaxe de la flèche grasse ES2015:

Cela va échouer:

 it('accesses the network', done => { this.timeout(500); // will not work // *this* binding refers to parent function scope in fat arrow functions! // ie the *this* object of the describe function done(); }); 

EDIT: Pourquoi cela échoue:

Comme le mentionne @atoth dans les commentaires, les fonctions de la flèche grasse n’ont pas leur propre liaison. Par conséquent, il n’est pas possible pour la fonction it de se lier à celle du rappel et de fournir une fonction de délai d’attente .

Bottom line : N’utilisez pas de fonctions fléchées pour les fonctions nécessitant un délai d’expiration accru.

Si vous utilisez NodeJS, vous pouvez définir le délai d’attente dans package.json

 "test": "mocha --timeout 10000" 

alors vous pouvez utiliser npm comme:

 npm test 

En ligne de commande:

 mocha -t 100000 test.js 

Vous pouvez également envisager d’adopter une approche différente et de remplacer l’appel à la ressource réseau par un object stub ou simulé. En utilisant Sinon , vous pouvez découpler l’application du service réseau, en concentrant vos efforts de développement.

Pour tester la navigation sur 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); }); }); }); 

Dans l’exemple, le temps de test est de 4000 (4s).

Note: setTimeout(done, 3500) est mineur car done est appelé dans le temps du test mais clearTimeout(timeOut) il évite qu’il soit utilisé pendant tout ce temps.