Как утверждать, что функция не вызывает исключения

QUnit имеет утверждение для проверки того, что функция вызывает исключение (QUnit/raises). Возможно ли, используя QUnit, утверждать, что функция не вызывает исключения.

Я понимаю, что его можно протестировать, как в следующем коде:

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

Но я думаю, что это должно быть возможно, используя QUnit. Любые подсказки?

Ответ 1

В qunit нет такого метода

Однако, если вы просто напишите следующий код, который намного короче, вы получите тот же результат с дополнительными преимуществами

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

1/Если код теста вызывает исключение, qunit пометит тест как не выполненный.

2/Если вы установите флажок "no try/catch", вы сможете отлаживать, где было выбрано исключение, что не соответствует вашему try/catch

Ответ 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: ...