2015-08-27 10 views
34

Wenn ich Code in einem Test habe, der nie erreicht werden sollte (zum Beispiel die fail Klausel einer Zusage-Sequenz), wie kann ich den Test erzwingen?Force-Failing eines Jasmine-Tests

Ich benutze etwas wie expect(true).toBe(false);, aber das ist nicht schön.

Die Alternative wartet auf den Test zu Timeout, die ich vermeiden möchte (weil es langsam ist).

Antwort

42

Jasmin bietet eine globale Methode fail(), die it() innerhalb spec Blöcke verwendet werden kann, und ermöglicht auch benutzerdefinierte Fehlermeldung zu verwenden:

it('should finish successfully', function (done) { 
    MyService.getNumber() 
    .success(function (number) { 
    expect(number).toBe(2); 
    done(); 
    }) 
    .fail(function (err) { 
    fail('Unwanted code branch'); 
    }); 
}); 

Dies ist eingebaut in Jasmine Funktionalität und es funktioniert überall fein im Vergleich zu die "Fehler" -Methode, die ich unten erwähnt habe.

Vor Update:

Sie haben einen Fehler von diesem Code Zweig werfen kann, wird es eine spec sofort fehlschlagen und Sie werden in der Lage sein Nachricht individuelle Fehler bieten:

it('should finish successfully', function (done) { 
    MyService.getNumber() 
    .success(function (number) { 
    expect(number).toBe(2); 
    done(); 
    }) 
    .fail(function (err) { 
    throw new Error('Unwanted code branch'); 
    }); 
}); 

Aber Sie sollte vorsichtig sein, wenn Sie einen Fehler von Promise Success Handler then() werfen wollen, weil der Fehler dort verschluckt wird und nie auftauchen wird. Außerdem sollten Sie sich der möglichen Fehlerbehandlungsroutinen in Ihrer App bewusst sein, durch die dieser Fehler in Ihrer App möglicherweise auftritt, sodass ein Test nicht fehlschlagen kann.

+7

Es gibt auch 'done.fail ('message')'. – TrueWill

+1

Für diejenigen, die auf einer älteren Version von Jasmine feststeckten, ist die "fail" -Methode in 1.3 nicht verfügbar, kann aber effektiv durch "new error (message)" polyfilled werden. Die Effektivität kann von Ihrem Test Runner abhängen - denken Sie auch an etwas wie 'expect ('Grund für Fehler'). ToBeNull()'. – ryanwebjackson

Verwandte Themen