Je soumets une demande réseau dans un scénario de test, mais cela prend parfois plus de 2 secondes (délai d'attente par défaut).
Comment augmenter le délai d'expiration 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 fléchées es6, vous pouvez ajouter un .timeout(ms)
à la fin de votre définition it
:
it('should not timeout', (done) => {
doLongThing().then(() => {
done();
});
}).timeout(5000);
Au moins, cela fonctionne dans TypeScript.
(depuis que je suis confronté à cela aujourd'hui)
Faites attention lorsque vous utilisez la syntaxe ES2015 Fat Arrow:
Cela échouera:
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();
});
EDIT: pourquoi ça échoue:
Comme @atoth le mentionne dans les commentaires, les fonctions de la flèche épaisse n'ont pas leur propre cette liaison . Par conséquent, il n'est pas possible pour la fonction it de se lier à this du rappel et de fournir un fonction timeout .
Ligne de fond : n'utilisez pas les fonctions fléchées pour les fonctions nécessitant un délai d'expiration plus long.
Si vous utilisez dans NodeJS, vous pouvez définir un délai d'expiration dans package.json.
"test": "mocha --timeout 10000"
alors vous pouvez utiliser npm comme ceci:
npm test
En ligne de commande:
mocha -t 100000 test.js
Vous pouvez également penser à adopter une approche différente et à remplacer l'appel à la ressource réseau par un objet stub ou fictif. En utilisant Sinon , vous pouvez découpler l'application du service réseau, en concentrant vos efforts de développement.
Pour la négociation 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).
Remarque: setTimeout(done, 3500)
est mineur pour que done
est appelé dans le temps du test mais clearTimeout(timeOut)
il évite qu’il ne soit utilisé tout ce temps.