如何断言函数不会引发异常

时间:2012-03-22 12:34:15

标签: javascript unit-testing testing qunit

QUnit有一个断言用于测试函数引发异常(QUnit/raises)。是否可以 - 使用QUnit - 断言函数不会引发异常。

我意识到可以像下面的代码一样测试它:

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

但我认为应该可以使用QUnit。有线索吗?

2 个答案:

答案 0 :(得分:16)

qunit中没有这样的方法

但是,如果您只是编写以下代码,该代码要短得多,您将获得相同的结果并带来额外的好处

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

1 /如果测试代码引发异常,qunit会将测试标记为失败。

2 /如果选中“no try / catch”复选框,您将能够调试抛出异常的位置,而try / catch不是这种情况

答案 1 :(得分:2)

我遇到了与您在评论中提到的问题相同的问题,即我的测试没有测试Error会导致“严重”停止显示格式错误的Died on test #1消息而没有任何有用的信息。

我最终使用了两者的混合;一个测试raises(),另一个测试try/catch

我使用raises()进行测试,测试是否抛出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: ...