2015-08-27 20 views
34

Jeśli mam kod w teście, który nigdy nie powinien zostać osiągnięty (na przykład klauzula obietnicy o numerze fail), w jaki sposób mogę wymusić przerwanie testu?Wymuszenie niepowodzenia testu jaśminowego

Używam czegoś podobnego do expect(true).toBe(false);, ale to nie jest ładne.

Alternatywa czeka na przetestowanie limitu czasu, którego chcę uniknąć (ponieważ jest wolny).

Odpowiedz

42

Jasmine zapewnia sposób globalny fail(), który może być używany wewnątrz bloków wyspecjalizoway it() a także pozwala wykorzystać niestandardowy komunikat o błędzie:

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

ta jest wbudowana funkcja Jasmine i działa dobrze wszędzie w porównaniu z metoda "błędu", o której wspomniałem poniżej.

Przed aktualizacją:

można rzucić błąd z tego kodu oddziału, natychmiast nie spec i będziesz w stanie dostarczyć niestandardowy komunikat o błędzie:

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

Ale ty powinieneś być ostrożny, jeśli chcesz rzucić błąd od obsługi sukcesu Promise then(), ponieważ błąd zostanie tam połknięty i nigdy nie pojawi się. Powinieneś także zdawać sobie sprawę z możliwych procedur obsługi błędów w aplikacji, które mogą złapać ten błąd w aplikacji, w wyniku czego nie będzie można zdać testu.

+7

Istnieje również "done.fail (" message ")'. – TrueWill

+1

Dla tych, którzy utknęli na starszej wersji Jasmine, metoda "fail" nie jest dostępna w wersji 1.3, ale może być skutecznie polyfilled przez "throw new Error (message)". Skuteczność może zależeć od twojego biegacza testowego - również rozważ coś w stylu "oczekiwać (" [przyczyna niepowodzenia] ") toBeNull()'. – ryanwebjackson

Powiązane problemy