web-dev-qa-db-fra.com

Comment augmenter le délai d'attente pour un seul cas de test dans le moka

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?

386
Mahendra S

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);
632
Dan Kohn

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.

130
Chris Sparrow

(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.

69
chriskelly

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
40
Sumit Jolly

En ligne de commande:

mocha -t 100000 test.js
20
andrey

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.

16
David Souther

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.

8
alditis