Je soumets une demande de réseau dans un cas de test, mais cela prend parfois plus de 2 secondes (le délai par défaut).
Comment puis-je augmenter le délai d'expiration pour un seul cas de test?
Je soumets une demande de réseau dans un cas de test, mais cela prend parfois plus de 2 secondes (le délai par défaut).
Comment puis-je augmenter le délai d'expiration pour un seul cas de test?
Réponses:
C'est parti : 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);
before(function(done){this.timeout(5 * 1000);...});
.timeout(500)
à la fin deit(...).timeout(500)
Si vous souhaitez utiliser les fonctions fléchées es6, vous pouvez ajouter un .timeout(ms)
à la fin de votre it
définition:
it('should not timeout', (done) => {
doLongThing().then(() => {
done();
});
}).timeout(5000);
Au moins, cela fonctionne dans Typescript.
.timeout
n'est pas inclus dans les typages DefinitelyTyped pour mocha: i.imgur.com/jQbWCn1.png - L'utilisation this.timeout(2000)
ou this.slow(500)
avec une ancienne fonction régulière fonctionne et se compile sans erreurs
it
, cela ne fonctionne pas describe
.
describe()
ou context()
?
.timeout
est désormais inclus dans les typages de Mocha DefinitelyTyped à: Mocha.IRunnable
. Cependant, si vous utilisez l'IDE Webstorm pour exécuter ces tests, une note de prudence: pour une raison quelconque, le plug-in d'intégration Mocha de WebStorm ne reconnaît toujours pas les tests Mocha avec .timeout()
ajout (ce qui signifie qu'aucun bouton `` exécuter '' n'apparaît à côté d'eux), et donc je préconise d'éviter les fonctions fléchées pour permettre l'utilisation de à la this.timeout()
place.
(depuis que j'ai rencontré ça aujourd'hui)
Soyez prudent lorsque vous utilisez la syntaxe de la flèche de gras ES2015:
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 cela échoue:
Comme @atoth le mentionne dans les commentaires, les fonctions des flèches grasses n'ont pas leur propre cette liaison. Par conséquent, il n'est pas possible pour la fonction it de se lier à cela du rappel et de fournir une fonction de délai d'expiration .
Conclusion : n'utilisez pas les fonctions fléchées pour les fonctions qui nécessitent un délai d'expiration plus long.
this
liaison sur les fonctions fléchées - pas de la même manière ne suggérerait qu'elles ont une sorte de, juste différente. Ils n'ont que des portées lexicales. Vous ne pouvez pas lier cela non existant. C'est pourquoi .bind
, .call
etc. ne fonctionne pas avec.
this
est.
Si vous utilisez dans NodeJS, vous pouvez définir le délai d'expiration dans package.json
"test": "mocha --timeout 10000"
alors vous pouvez exécuter en utilisant npm comme:
npm test
Vous pouvez également penser à adopter une approche différente et à remplacer l'appel à la ressource réseau par un objet stub ou mock. En utilisant Sinon , vous pouvez dissocier l'application du service réseau, en concentrant vos efforts de développement.
Pour tester la non-négation 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 (4 s).
Remarque: setTimeout(done, 3500)
est mineur pour ce qui done
est appelé dans le temps du test mais clearTimeout(timeOut)
il évite que utilisé tout ce temps.
Cela a fonctionné pour moi! Impossible de trouver quoi que ce soit pour le faire fonctionner avant ()
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
});