Mocha: timeout de 2000ms dépassé. Assurez-vous que le rappel done() est appelé dans ce test.

Créé le 26 déc. 2015  ·  19Commentaires  ·  Source: mochajs/mocha

J'obtiens l'erreur suivante lors de l'exécution de toute la suite de tests :

timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.

J'ai trouvé cette réponse super utile sur StackOverflow http://stackoverflow.com/questions/16607039/in-mocha-testing-while-calling-asynchronous-function-how-to-avoid-the-timeout-er# et ici https : //github.com/mochajs/mocha/pull/278

Cependant, le problème persiste même après la suppression de chaque occurrence de mes tests qui traitent de HTTP et des promesses. Tout ce que j'ai maintenant, ce sont les spécifications de la directive angulaire et du contrôleur qui ne semblent pas faire grand-chose d'autre que la vérification des données du modèle, de la directive et de la logique du contrôleur.

Est-ce que quelqu'un sait pourquoi cela se produit toujours et s'il existe un meilleur moyen de savoir exactement quel est le problème? Merci!

Commentaire le plus utile

ajoutez simplement votre package.json sous scripts

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

Ensuite, vous pouvez simplement courir

      npm test

Tous les 19 commentaires

@gumatias pour être beaucoup plus utile, nous aurions besoin de définir vos tests

merci pour le retour @boneskull !

Il y a environ 700+ spécifications pour le moment et elles sont toutes en code propriétaire. Je peux fournir l'un des deux échantillons similaires, cela serait-il utile ?

Vous trouverez ci-dessous ce que j'ai actuellement dans package.json. La mise à niveau des bibliothèques telles que moka et karma-mocha n'a pas semblé aider.

"devDependencies": {
  "karma": "~0.12.30",
  "karma-chai-jquery": "~1.0.0",
  "karma-chrome-launcher": "~0.1",
  "karma-coffee-preprocessor": "~0.1.3",
  "karma-firefox-launcher": "~0.1",
  "karma-jquery": "~0.1.0",
  "karma-mocha": "0.2.0",
  "karma-sinon-chai": "~0.1.1",
  "karma-spec-reporter": "~0.0.10",
  "mocha": "^2.2.5"
}

Vous trouverez ci-dessous certaines de mes tentatives pour atteindre un état où les délais d'attente cesseraient de se produire (sans succès).

1. Appelé done() dans et après chaque promesse et appels asynchrones dans les tests

2. Suppression de toutes les spécifications qui traitent des appels asynchrones, des promesses, de httpBackend et du délai d'attente (juste au cas où)

3. Mise à niveau de la plupart des bibliothèques dans package.json :

"devDependencies": {
  "karma": "~0.12.30",
  "karma-chai-jquery": "1.0.0",
  "karma-chrome-launcher": "0.2.2",
  "karma-coffee-preprocessor": "0.3.0",
  "karma-firefox-launcher": "~0.1",
  "karma-jquery": "0.1.0",
  "karma-mocha": "0.2.1",
  "karma-sinon-chai": "1.1.0",
  "karma-spec-reporter": "0.0.23",
  "mocha": "2.3.4"
}

4. Suppression des spécifications que le journaliste de spécifications de karma se plaignait d'être lentes :
par exemple Chrome 39.0.2171 (Mac OS X 10.11.2) SLOW 2.457 secs: My Spec Name "before each" hook for "should display " Add My Spec" when doing something"

Il s'est avéré que d'autres nouvelles spécifications se plaignaient d'être lentes. Cela pourrait probablement conduire à supprimer des spécifications sans vraiment trouver la cause première.

Clôturer ce problème. Il s'est avéré qu'il s'agissait d'un problème de fuite de mémoire décrit ici https://github.com/mochajs/mocha/issues/2030

Des délais d'attente spécifiques au test peuvent également être appliqués, ou l'utilisation de this.timeout(0) pour désactiver tous les délais d'attente :

 it('should take less than 500ms', function(done){
  this.timeout(500);
  setTimeout(done, 300);
});

source : https://mochajs.org/#timeouts

Si vous utilisez Ember, essayez d'encapsuler les appels asynchrones dans Ember.run => lisez ceci

J'ai eu le même problème, et Ember.run => l'a résolu.

N'oubliez pas non plus que la flèche doit être une grosse flèche (j'ai fait cette erreur une fois en utilisant -> au lieu de =>) c'est à cause de la portée de javascript, lisez-la si vous êtes intéressé.

lien de débordement de pile

Je reçois
Erreur : dépassement du délai d'attente de 2000 ms. Pour les tests et hooks asynchrones, assurez-vous que "done()" est appelé ; si vous retournez une promesse, assurez-vous qu'elle se résout.
Comment régler ceci?
Mon code est :

describe("Test Search", function() {
    it("Test Post Request", function(done) {
            chai.request(postReqURL)
            .post(postReqURL)
            .send(postReqObject)
            .end(function (err, res) {
                if (err) done(err);
                expect(res.status).to.equal(200);
                done()
            })
       });
});

Salut @vishnu2prasadh , avez-vous essayé d'augmenter le délai d'attente plus longtemps que l'API HTTP ne devrait répondre ? L'utilisation de votre test de done semble être correcte.

@ScottFreeCode merci. Erreur résolue en ajoutant this.timeout(10000) ; à l'intérieur

it("Test Post Request", function(done) {
     this.timeout(10000);
});

ajoutez simplement votre package.json sous scripts

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

Ensuite, vous pouvez simplement courir

      npm test

@elvinaze existe-t-il un moyen d'augmenter les limites de délai d'attente dans le bloc beforeEach ?

ajoutez simplement votre package.json sous scripts

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

Ensuite, vous pouvez simplement courir

      npm test

la réponse la plus utile jusqu'à présent

ajoutez simplement votre package.json sous scripts

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

Ensuite, vous pouvez simplement courir

      npm test

encore pour moi pourquoi .Error: Timeout de 10000ms dépassé. Pour les tests et hooks asynchrones, assurez-vous que "done()" est appelé ; si vous retournez une promesse, assurez-vous qu'elle se résout

it('devrait accéder au module utilisateur', fonction (fait){
any_asynchfunction ().then(function(check){
essayer{
assert.strictEqual(check,true,'l'utilisateur admin a accès au module utilisateur');
terminé();
}attraper (err){
fait (err);
}
});
});

var any_asynchfunction = fonction (){
var différé = q.defer();
// Appeler une fonction async comme : Appel API (http://api.domain.com)
deferred.resolve(res);
retour différé.promesse;
}

Tester le code asynchrone avec Mocha à l'aide de rappels et de promesses

@ashish101184 , n'ajoutez pas de commentaires à des problèmes fermés sans rapport !

Votre problème a été expliqué dans la documentation .

it('should access user module', function() {
  return any_asynchfunction()
    .then(function(check) {
      assert.strictEqual(check, true, 'admin user should have access to user module');
    });
});

Des délais d'attente spécifiques au test peuvent également être appliqués, ou l'utilisation de this.timeout(0) pour désactiver tous les délais d'attente :

 it('should take less than 500ms', function(done){
  this.timeout(500);
  setTimeout(done, 300);
});

source : https://mochajs.org/#timeouts
Bonjour, j'ai installé botium directline3 face à l'erreur « Délai d'expiration de 60000 ms dépassé » selon vos directives dans quel fichier devrions-nous ajouter ces lignes

J'ai résolu ce problème en créant un délai d'attente global plutôt que de le définir pour des tests individuels ou d'ajouter la configuration à mon fichier package.json . Dans mon dossier de test, j'ai créé un fichier mocha.opts . Dans le fichier, j'ai défini un délai d'expiration raisonnable pour l'exécution de mes tests, par exemple,

--timeout 10000

J'obtenais également cette erreur, et après plusieurs heures de recherche et de débogage, j'ai trouvé la cause première.

Considérez ce test :

const delay = require('delay')

describe('Test', function() {
    it('should resolve', async function(done) {
      await delay(1000)
    })
})

Lorsque je lance le test, j'obtiens cette erreur :

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

Considérons maintenant ce test légèrement différent, où l'argument done est supprimé :

const delay = require('delay')

describe('Test', function() {
    it('should resolve', async function() {
      await delay(1000)
    })
})

Lorsque je lance ce test, il passe.

D'une manière ou d'une autre, la présence de l'argument done dans la fonction async interrompt le test, même s'il n'est pas utilisé, et même si done() est appelé à la fin du test.

ajoutez simplement votre package.json sous scripts

       "scripts": {
            "start": "SET NODE_ENV=dev && node ./bin/www",
            "devstart": "SET NODE_ENV=dev && nodemon ./bin/www",
            "test": "mocha --timeout 10000"  <= increase this from 1000 to 10000
        },

Ensuite, vous pouvez simplement courir

      npm test

L'ajout de --timeout 10000 aux "scripts" de "test" a fonctionné à merveille pour moi.
Merci!

Cette page vous a été utile?
0 / 5 - 0 notes