2012-03-22 49 views
15

QUnit有一個斷言,用於測試函數是否引發異常(QUnit/raises)。是否有可能 - 使用QUnit - 斷言功能不會引起例外。如何斷言函數不會引發異常

我意識到,它可以測試它像下面的代碼:

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

但我認爲它應該使用QUnit成爲可能。任何線索?

+0

檢查這個http://stackoverflow.com/questions/10190392/asserting-that-a-function-throws-exceptions-with-qunit它可以幫助 – hanane 2014-03-30 20:44:12

回答

15

有一個在qunit沒有這樣的方法

但是,如果你只寫了下面的代碼要短得多,你將獲得相同的結果與其它附加的好處

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

1 /如果代碼的測試會引發異常,qunit會將測試標記爲失敗。

2 /如果你勾選「無的try/catch」複選框,您將能夠調試在異常被拋出,這是不符合你的try/catch的情況下

+0

當然!這很簡單。對我來說顯然有點太簡單了。感謝您的回答:) – anissen 2012-03-22 12:51:20

+3

事實證明,這太簡單了。 如果該功能引發異常,則測試失敗*沒有失敗消息。 如果函數不引發異常,則測試會按預期成功。 ok() - 斷言中的消息從不使用。 – anissen 2012-03-23 13:35:59

+0

請注意,您可能還應該在test()函數內添加對expect()的調用,以便可以用這種方式驗證斷言的數量。 – Krinkle 2012-04-14 06:35:35

2

我有同樣的問題,因爲你在評論中提到,我的測試沒有測試Error將被拋出,將會「不好」地顯示格式錯誤的Died on test #1消息,而沒有任何有用的信息。

我最終使用了兩者的混合;一個測試爲raises(),另一個爲try/catch

我用加註(),用於在此進行測試,一個Error拋出測試,類似於:

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

如果上述拋出Error所有的罰款,如果不被顯示一個很好的格式化的消息,與此類似:

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

然後我用try/catch爲此必須確保沒有Error測試被拋出,與此類似:

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

如果上面沒有拋出Error所有的罰款,如果一個Error被拋出時顯示一個很好的格式化的消息,與此類似:

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

以上是基於假設您正在測試託管自定義拋出錯誤,並且您的'myFunction()'確實執行了故意拋出新錯誤...)'給出了一定的無效條件。你不應該考慮當然的意外錯誤。 – Nope 2013-12-05 12:24:16