Как утверждать, что функция не вызывает исключение - PullRequest
17 голосов
/ 22 марта 2012

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

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

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

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

Ответы [ 2 ]

16 голосов
/ 22 марта 2012

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

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

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

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

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

2 голосов
/ 05 декабря 2013

У меня была та же проблема, о которой вы упоминали в комментарии, из-за которой мой тест, в котором нет теста Error, перестал бы "плохо" показывать плохо отформатированное сообщение Died on test #1 без какой-либо полезной информации.

Iзакончил тем, что использовал смесь обоих;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 для тестов, которые должны гарантировать, что нет *Выдается 1018 *, аналогично следующему:

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: ...
...