459 votes

Comment augmenter le délai d'attente pour un seul scénario de test dans mocha ?

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 augmenter le délai d'attente pour un seul cas de test ?

733voto

dankohn Points 6999

Voilà : 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, procédez comme suit :

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

25 votes

Le délai d'attente est en millisecondes, et il est de 2000 par défaut.

56 votes

J'utilisais les fonctions fléchées d'es6 et j'ai dû revenir aux anciennes définitions de "fonction" pour que "ceci" fonctionne.

0 votes

Avez-vous un exemple simple de ce "[Mettez le code du réseau ici, avec done() dans le callback]" ? Cette partie me perturbe.

158voto

Chris Sparrow Points 1439

Si vous souhaitez utiliser les fonctions de flèche de l'es6, vous pouvez ajouter une fonction .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.

3 votes

Cela fonctionne, mais .timeout n'est pas inclus dans les typages DefinitelyTyped pour mocha : i.imgur.com/jQbWCn1.png - Utilisation this.timeout(2000) o this.slow(500) avec une vieille fonction normale fonctionne et compile sans erreurs

3 votes

Malheureusement, cela ne fonctionne que pour it il ne fonctionne pas pour describe .

3 votes

Existe-t-il un moyen de faire cela pour describe() o context() ?

76voto

chriskelly Points 360

(puisque je suis tombé dessus aujourd'hui)

Soyez prudent lorsque vous utilisez la syntaxe de la flèche grasse de l'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!
  // i.e. the *this* object of the describe function

  done();
});

EDIT : Pourquoi ça échoue :

Comme le mentionne @atoth dans les commentaires, grosse flèche ne disposent pas de leur propre este reliure. Par conséquent, il n'est pas possible pour le il à lier à la fonction este du callback et fournir un délai d'attente fonction.

Ligne de fond : N'utilisez pas les fonctions flèches pour les fonctions qui nécessitent un délai d'attente accru.

2 votes

Parce que les fonctions de flèche n'ont pas du tout cela. Plus d'informations ici : blog.getify.com/flèche-ici

2 votes

Oui, mais je l'ai expliqué dans la réponse. Voir mon commentaire. // à l'intérieur du code. Je devrais probablement l'expliquer en dehors du bloc de code pour que ce soit plus clair. Cela existe mais cela vient de la portée extérieure.

1 votes

Mon explication est plus précise. Il n'y a pas this liant les fonctions de la flèche - pas de la même manière suggérerait qu'ils ont une sorte de, juste différente. Ils ont seulement des portées lexicales. Vous ne pouvez pas lier des choses inexistantes. C'est pourquoi .bind , .call etc. ne fonctionne pas avec lui.

58voto

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

"test": "mocha --timeout 10000"

puis vous pouvez l'exécuter en utilisant npm comme :

npm test

2 votes

C'est pour tous les cas de test, pas pour un seul cas de test.

1 votes

Je conviens que cela ne répond pas à la question, mais c'était suffisant pour mon cas d'utilisation où je ne me souciais pas de savoir si cela augmentait pour tous les tests. Je pense que beaucoup de personnes qui se retrouvent ici peuvent ne pas se soucier de savoir si c'est pour un ou tous les tests, donc j'apprécie que cette réponse soit là.

24voto

andrey Points 983

Depuis la ligne de commande :

mocha -t 100000 test.js

18 votes

Cela augmente le délai d'attente pour tous les cas de test plutôt que "pour un cas d'essai particulier" comme le demande la question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X