2013-08-15 10 views
15

ich mit Mokka-Test-Framework mit NodeJS getting started. Erfolgreiche Assertions funktionieren einwandfrei, aber wenn die Assertion fehlschlägt, werden die Testzeitlimits überschritten. Für die Behauptung habe ich Should and Expect versucht. Zum Beispiel (Asynchron-Code)Mocha gescheitert Behauptung Timeout verursacht

it('should create new user', function(done){ 
    userService.create(user).then(function(model){ 
     expect(model.id).to.be(1); //created user ID 
     done(); 
    }, done) 
    }); 

Hier ist das, wenn Modell-ID nicht 1 ist dann der Test timesout statt Berichterstattung fehlgeschlagen Behauptung. Ich bin mir sicher, dass ich etwas falsch mache. Schätze deine Hilfe. Vielen Dank!

+0

Sieht aus wie ist aktuelle Implementierung ist. https://github.com/visionmedia/mocha/pull/278 – SamSerious

Antwort

17

erwarten einen Fehler wirft, die durch das Versprechen gefangen wird. Das Hinzufügen einer catch-Bedingung, die done aufruft, behebt dies.

it('should create new user', function(done) { 
    userService.create(user).then(function(model) { 
     expect(model.id).to.be(1); //created user ID 
     done(); 
    }).catch(function(e) { 
     done(e); 
    }) 
}); 
+0

Wenn Sie Mocha 1.18 oder besser verwenden, ist Danvks Antwort unten besser. Fast hätte ich diese Antwort selbst übersehen, deshalb kommentiere ich hier auf Sichtbarkeit. – Retsam

0

Sieht aus wie done nie aufgerufen. Neben then benötigen Sie möglicherweise auch eine else, um den Fehler zu behandeln.

18

Shawns Antwort funktioniert, aber es gibt einen einfacheren Weg.

Wenn Sie das Versprechen von Ihrem Test zurückkehren, werden Mocha alles für Sie erledigen:

it('should create new user', function() { 
    return userService.create(user).then(function(model){ 
    expect(model.id).to.be(1); //created user ID 
    }); 
}); 

Kein done Rückruf erforderlich!

+0

Versprechen Unterstützung [aufgenommen] (https://github.com/mochajs/mocha/blob/master/HISTORY.md#1180--2014-03-13) in Mocha 1.18, das heißt, nachdem diese Frage wurde zuerst gefragt. – danvk

+0

Großartig! Ich werde Shawns Antwort akzeptieren, wie danvk darauf hingewiesen hat :) – SamSerious

+0

Danke. Dies ist die beste Lösung. –