2014-07-03 6 views
7

des Lauf mit Mokka Ergebnissen in Ablaufen, anstatt lassen Mokka die Fehler abzufangen, so dass es sofort scheitern könnte ..Wie man Behauptungen innerhalb eines Versprechens macht, wenn irgendwelche geworfenen Fehler nicht aufblasen?

var when = require('when'); 
var should = require('should'); 

describe('', function() { 
    it('', function(done) { 
     var d = when.defer(); 
     d.resolve(); 
     d.promise.then(function() { 
      true.should.be.false; 
      false.should.be.true; 
      throw new Error('Promise'); 
      done(); 
}); }); }); 

http://runnable.com/me/U7VmuQurokZCvomD

Gibt es eine andere Art und Weise Aussagen innerhalb der Versprechen zu machen, so dass, wenn sie scheitern, sie von Mocha gefangen werden, so dass sie sofort versagen?


Per chai Empfehlung ging ich hinein und es scheint, dass ich einen direkten Zugriff auf das Versprechen Objekt haben, nicht wahr? Das Problem ist, dass ich mit Versprechen nicht direkt .. Meine schlecht, wenn ich vereinfacht aber Dies wäre eine näher an der Realität Beispiel

function core_library_function(callback){ 
    do_something_async(function which_returns_a(promise){ 
     promise.then(function(){ 
      callback(thing); 
}); }); } 

describe('', function() { 
    it('', function(done) { 
     core_library_function(function(thing){ 
      ... 
      done();       
}); }); }); 

So habe ich wirklich keine Kontrolle über das Versprechen direkt, es abstrahiert weit weit weg.

+0

Erwägen als –

Antwort

12

Wenn Sie Versprechen mit Mocha verwenden, müssen Sie return das Versprechen im Test und wollen den done Parameter entfernen, da der Rückruf nicht verwendet wird.

it('', function() { 
    var d = when.defer(); 
    d.resolve(); 
    return d.promise.then(function() { 
     throw new Error('Promise'); 
    }); 
}); 

Dies wird in der Dokumentation unter Working with Promises beschrieben:

Alternately, instead of using the done() callback, you can return a promise.

+0

versprach chai Ich fand auch, dass die 'Fang()' Funktion am Ende genannt gleichermaßen gut funktioniert, ruft 'done() 'innen und übergibt es den Fehler: http://Stackoverflow.com/a/40563588/88111 –