Mocha: Timeout von 2000ms überschritten. Stellen Sie sicher, dass der Rückruf done() in diesem Test aufgerufen wird.

Erstellt am 26. Dez. 2015  ·  19Kommentare  ·  Quelle: mochajs/mocha

Beim Ausführen der gesamten Testsuite erhalte ich die folgende Fehlermeldung:

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

Ich fand diese super nützliche Antwort auf StackOverflow http://stackoverflow.com/questions/16607039/in-mocha-testing-while-calling-asynchronous-function-how-to-avoid-the-timeout-er# und hier https: //github.com/mochajs/mocha/pull/278

Das Problem besteht jedoch auch nach dem Löschen aller Vorkommnisse in meinen Tests, die sich mit HTTP und Versprechen befassen, weiterhin. Alles, was ich jetzt habe, sind Angular-Direktiven- und Controller-Spezifikationen, die nicht viel anderes zu tun scheinen, als Vorlagendaten, Direktiven und Controller-Logik zu überprüfen.

Weiß jemand, warum dies immer noch passiert und ob es einen besseren Weg gibt, das Problem genau zu kennen? Danke!

Hilfreichster Kommentar

fügen Sie einfach Ihre package.json unter scripts hinzu

       "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
        },

Dann kannst du einfach laufen

      npm test

Alle 19 Kommentare

@gumatias um viel mehr Hilfe zu sein, müssten wir deine Tests einstellen

danke für das Feedback @boneskull !

Im Moment gibt es über 700 Spezifikationen und sie sind alle proprietärer Code. Ich kann eines von zwei ähnlichen Beispielen bereitstellen, wäre das hilfreich?

Unten ist, was ich derzeit in package.json habe. Das Aktualisieren von Bibliotheken wie Mokka und Karma-Mokka schien nicht zu helfen.

"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"
}

Unten sind einige meiner Versuche, einen Zustand zu erreichen, in dem die Zeitüberschreitungen aufhören würden (ohne Erfolg).

1. Aufruf von done() innerhalb und nach jeder Zusage und asynchronen Aufrufen in Tests

2. Alle Spezifikationen entfernt, die sich mit asynchronen Anrufen, Versprechungen, httpBackend und Timeout befassen (nur für den Fall)

3. Die meisten Bibliotheken in package.json aktualisiert:

"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. Spezifikationen entfernt, über die sich der Karma-Spec-Reporter beschwerte, dass sie langsam sind:
zB 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"

Es stellte sich heraus, dass andere neue Spezifikationen sich beschwerten, langsam zu sein. Dies könnte wahrscheinlich dazu führen, dass Spezifikationen gelöscht werden, ohne die Ursache wirklich zu finden.

Schließen dieses Problems. Es stellte sich heraus, dass es sich um ein Speicherleck handelt, das hier beschrieben wird https://github.com/mochajs/mocha/issues/2030

Testspezifische Timeouts können ebenfalls angewendet werden oder die Verwendung von this.timeout(0) zum Deaktivieren aller Timeouts:

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

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

Wenn Sie Ember verwenden, versuchen Sie, asynchrone Aufrufe in Ember.run zu verpacken => lesen Sie dies

Ich hatte das gleiche Problem und Ember.run => hat es behoben.

Denken Sie auch daran, dass der Pfeil ein dicker Pfeil sein muss (ich habe einmal den Fehler gemacht, -> anstelle von => zu verwenden).

Stackoverflow-Link

Bekomme
Fehler: Timeout von 2000ms überschritten. Stellen Sie bei asynchronen Tests und Hooks sicher, dass "done()" aufgerufen wird; Wenn Sie ein Versprechen zurückgeben, stellen Sie sicher, dass es aufgelöst wird.
Wie kann man das beheben?
Mein Code ist:

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()
            })
       });
});

Hallo @vishnu2prasadh , haben Sie versucht, das Timeout auf einen längeren done in Ihrem Test scheint korrekt zu sein.

@ ScottFreeCode danke. Fehler durch Hinzufügen von this.timeout(10000) behoben; Innerhalb

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

fügen Sie einfach Ihre package.json unter scripts hinzu

       "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
        },

Dann kannst du einfach laufen

      npm test

@elvinaze gibt es eine Möglichkeit, die Zeitlimits im beforeEach-Block zu erhöhen?

fügen Sie einfach Ihre package.json unter scripts hinzu

       "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
        },

Dann kannst du einfach laufen

      npm test

die bisher nützlichste Antwort

fügen Sie einfach Ihre package.json unter scripts hinzu

       "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
        },

Dann kannst du einfach laufen

      npm test

für mich noch warum .Fehler: Timeout von 10000ms überschritten. Stellen Sie bei asynchronen Tests und Hooks sicher, dass "done()" aufgerufen wird; Wenn Sie ein Versprechen zurückgeben, stellen Sie sicher, dass es sich auflöst

it('sollte auf das Benutzermodul zugreifen', function(done){
any_asynchfunction ().then(function(check){
Versuchen{
assert.strictEqual(check,true,'Admin-Benutzer hat Zugriff auf das Benutzermodul');
getan();
}fangen(err){
erledigt(fehler);
}
});
});

var any_asynchfunction = Funktion (){
var verzögert = q.defer();
// Async-Funktion aufrufen wie: API-Aufruf (http://api.domain.com)
verzögert.resolve(res);
zurückgestellt.Versprechen zurückgeben;
}

Testen von asynchronem Code mit Mocha mithilfe von Rückrufen und Versprechen

@ashish101184 , füge keine Kommentare zu nicht zusammenhängenden geschlossenen Problemen hinzu!

Dein Problem wurde in der Dokumentation erklärt .

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

Testspezifische Timeouts können ebenfalls angewendet werden oder die Verwendung von this.timeout(0) zum Deaktivieren aller Timeouts:

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

Quelle: https://mochajs.org/#timeouts
Hallo, habe botium directline3 mit dem Fehler 'Timeout of 60000ms überschritten' gemäß Ihren Richtlinien installiert, in welche Datei wir diese Zeilen einfügen sollen

Ich habe dies dadurch gelöst, dass ich ein globales Timeout erstellt habe, anstatt es für einzelne Tests festzulegen oder die Konfiguration zu meiner package.json Datei hinzuzufügen. Unter meinem Testordner habe ich eine Datei mocha.opts . In der Datei habe ich eine angemessene Zeitüberschreitung für die Ausführung meiner Tests festgelegt, z.

--timeout 10000

Ich bekam auch diesen Fehler, und nach mehreren Stunden Recherche und Debugging fand ich die Ursache.

Betrachten Sie diesen Test:

const delay = require('delay')

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

Wenn ich den Test ausführe, erhalte ich diese Fehlermeldung:

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

Betrachten Sie nun diesen etwas anderen Test, bei dem das Argument done entfernt wird :

const delay = require('delay')

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

Wenn ich diesen Test durchführe, besteht er.

Irgendwie unterbricht das Vorhandensein des Arguments done in der async-Funktion den Test, selbst wenn es nicht verwendet wird und selbst wenn done() am Ende des Tests aufgerufen wird.

fügen Sie einfach Ihre package.json unter scripts hinzu

       "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
        },

Dann kannst du einfach laufen

      npm test

Das Hinzufügen von --timeout 10000 zu den "Test"-"Skripten" funktionierte für mich wie ein Zauber.
Dankeschön!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

robertherber picture robertherber  ·  3Kommentare

luoxi001713 picture luoxi001713  ·  3Kommentare

danielserrao picture danielserrao  ·  3Kommentare

3p3r picture 3p3r  ·  3Kommentare

smithamax picture smithamax  ·  4Kommentare