2012-03-22 27 views
15

QUnit ma potwierdzenie do sprawdzenia, czy funkcja wywołuje wyjątek (QUnit/raises). Czy jest to możliwe - używając QUnit - aby potwierdzić, że funkcja nie wywołuje wyjątku w postaci.Jak stwierdzić, że funkcja nie wywołuje wyjątku

Zdaję sobie sprawę, że jest możliwe, aby przetestować go jak w poniższym kodzie:

try { 
    theTest(); 
    ok(true); 
} catch (e) { 
    ok(false, "Expected to succeed"); 
} 

Ale myślę, że powinno być możliwe przy użyciu QUnit. Jakieś wskazówki?

+0

check to http://stackoverflow.com/questions/10190392/potwierdzanie-że-funkcja-throws-wyjątki-z-qunit to może pomóc – hanane

Odpowiedz

15

Nie ma takiej metody w qunit

Jednakże, jeśli tylko napisać następujący kod, który jest o wiele krótszy, można uzyskać ten sam rezultat z korzyści źródło dodatkowego

theTest(); 
ok(true, "My function does not crash"); 

1/Jeżeli kod testu podnosi wyjątek, qunit oznaczy test jako nieudany.

2/Jeśli zaznaczysz pole wyboru „no try/catch”, będzie można debugować gdzie wyjątek, który nie jest w przypadku Twojego try/catch

+0

Oczywiście! To całkiem proste. I najwyraźniej nieco zbyt proste, abym mógł to zrozumieć. Dzięki za odpowiedź :) – anissen

+3

Jak się okazało, było to trochę zbyt proste. Jeśli funkcja zgłasza wyjątek, test kończy się niepowodzeniem * bez * komunikatu o błędzie. Jeśli funkcja nie zgłasza wyjątku, test powiedzie się zgodnie z oczekiwaniami. Wiadomość w ok() - asercja nigdy nie jest używana. – anissen

+0

Pamiętaj, że prawdopodobnie powinieneś również dodać wywołanie funkcji expect() wewnątrz funkcji test(), aby liczba potwierdzeń mogła zostać zweryfikowana w ten sposób. – Krinkle

2

miałem ten sam problem jak wspomniałeś w komentarzu, że mój test, który nie został przetestowany, zatrzymałby "źle", pokazując źle sformatowany komunikat Died on test #1 bez żadnych użytecznych informacji.

Skończyło się na połączeniu obu; raises() dla jednego testu i try/catch dla drugiego testu.

użyłem podwyżki() dla testu, który testuje że Error jest wyrzucane, podobne do tego:

test("When myFunction() is called with a invalid instance Then Error is thrown", function() { 
    // Arrange 
    var testInstance = {}; 

    // Act 
    raises(function() { 
     myFunction(testInstance); 
    }, Error, "myFunction() should throw an Error"); 

    // Assert 
    // raises() does assertion 
}); 

Jeśli powyższe rzuca Error wszystko jest w porządku, a jeśli nie jest wyświetlany miłym sformatowana wiadomość, podobny do tego:

myFunction() should throw Error 
Result: No exception was thrown. 

następnie stosuje try/catch do badań, które muszą zapewnić, że nie są wyrzucane Error podobny do tego:

test("When myFunction() is called with a valid instance Then no Error is thrown", function() { 
    // Arrange 
    var testInstance = new myObject(); 
    var result; 

    // Act 
    try { 
     myFunction(testInstance); 
     result = true; 
    } catch(error) { 
     result = false; 
    } 

    // Assert 
    ok(result, "myFunction() should not throw an Error"); 
}); 

Jeśli powyższe nie Error rzuca wszystko jest w porządku i jeśli Error jest wyrzucany jest wyświetlany miłym sformatowany komunikat podobny do tego:

myFunction() should not throw an Error 
Source: ... 
+0

Powyższe opiera się na założeniu, że testujesz zarządzane niestandardowe generowane błędy, a twoja funkcja 'myFunction()' robi zamierzone 'throw new Error (...) 'ze względu na pewien nieważny warunek. Nie powinieneś testować niespodziewanych błędów poza kursem. – Nope

Powiązane problemy