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.