web-dev-qa-db-fra.com

Changer le délai d'attente par défaut pour le moka

Si nous avons un fichier de test unitaire my-spec.js et fonctionnant avec mocha:

mocha my-spec.js

Le délai d'attente par défaut sera de 2000 ms. Il peut être remplacé pour un test partiel avec un paramètre de ligne de commande:

mocha my-spec.js --timeout 5000

Est-il possible de changer le délai d'expiration par défaut globalement pour tous les tests? c'est-à-dire que la valeur de délai d'attente par défaut sera différente de 2000 ms lorsque vous appelez:

mocha my-spec.js
130
lm.

Par défaut, Mocha lit un fichier nommé test/mocha.opts pouvant contenir des arguments de ligne de commande. Donc, vous pouvez créer un tel fichier qui contient:

--timeout 5000

Chaque fois que vous exécutez Mocha sur la ligne de commande, il lira ce fichier et définira un délai d’attente de 5 secondes par défaut.

Une autre méthode qui peut être préférable en fonction de votre situation consiste à le définir comme suit dans un appel de niveau supérieur describe dans votre fichier de test:

describe("something", function () {
    this.timeout(5000); 

    // tests...
});

Cela vous permettrait de définir un délai d'expiration uniquement pour chaque fichier.

Vous pouvez utiliser les deux méthodes si vous souhaitez une valeur globale par défaut de 5000 mais définissez une méthode différente pour certains fichiers.


Notez que vous ne pouvez généralement pas utiliser une fonction de flèche si vous appelez this.timeout (ou accédez à tout autre membre de this que Mocha définit pour vous). Par exemple, cela ne fonctionnera généralement pas :

describe("something", () => {
    this.timeout(5000); //will not work

    // tests...
});

En effet, une fonction de flèche prend this de l'étendue dans laquelle la fonction apparaît. Mocha appellera la fonction avec une bonne valeur pour this mais cette valeur n'est pas transmise à l'intérieur de la fonction de flèche. La documentation de Mocha dit sur ce sujet :

Il est déconseillé de passer des fonctions de flèche ("lambdas") à Mocha. En raison de la liaison lexicale qui en résulte, ces fonctions ne peuvent pas accéder au contexte Mocha.

251
Louis

En ajoutant simplement la réponse correcte, vous pouvez définir le délai d’expiration avec la fonction de flèche comme ceci:

it('Some test', () => {

}).timeout(5000)
42
Denis

Ajoutant ceci pour être complet. Si vous (comme moi) utilisez un script dans votre fichier package.json, ajoutez simplement l'option --timeout à mocha:

"scripts": {
  "test": "mocha 'test/**/*.js' --timeout 10000",
  "test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},

Ensuite, vous pouvez exécuter npm run test pour exécuter votre suite de tests avec le délai d'attente défini à 10 000 millisecondes.

29
Freedom_Ben

Dans les versions actuelles de Mocha, le délai d'attente peut être modifié globalement comme ceci:

mocha.timeout(5000);

Ajoutez simplement la ligne ci-dessus n’importe où dans votre suite de tests, de préférence en haut de vos spécifications ou dans un assistant de test séparé.


Dans les versions antérieures, et uniquement dans un navigateur, vous pouvez modifier la configuration globale à l'aide de mocha.setup.

mocha.setup({ timeout: 5000 });

La documentation ne couvre pas le paramètre de délai global, mais offre quelques exemples sur la façon de modifier le délai dans d'autres scénarios courants.

22
GOTO 0