Утверждение исключения в QUnit

Я работаю над модульным тестом, который проверяет сгенерированный код парсера на основе грамматики. (сгенерировано с помощью PegJS) Я почти закончил с большинством возможных случаев. Осталось 2-3 из них, и ожидается, что они вызовут исключение, но я не могу понять, как утверждать исключение.

(function () {

    "use strict";

    QUnit.module('durationTests');

    QUnit.test('durationParseTest', function (assert) {

        var dp1 = DurationParser.parse(new String('')); //this is the one that is expected to throw exception 
        var dp2 = DurationParser.parse(new String('P'));
        var dp3 = DurationParser.parse(new String('P13MT2H'));
        var dp4 = DurationParser.parse(new String('P2Y6M'));

        assert.deepEqual(dp2,[]);
        assert.deepEqual(dp3, [
            {
                "type": "M",
                "val": 13
            },
            {
                "type": "T"
            },
            {
                "type": "H",
                "val": 2
            }
        ]);


есть много других случаев, но я включил только эти два, чтобы показать, как я их тестировал. Сейчас они работают нормально.

Что я не понимаю об утверждении QUnit throw, так это то, что я не знаю, как передать это утверждение этой специальной функции синтаксического анализа. Любая помощь приветствуется.

Изменить: Я пробовал многие из предложенных способов на веб-сайте QUnit, но до сих пор не могу понять, как правильно протестировать это конкретное исключение.


person Poyraz Kürkçüoğlu    schedule 25.11.2019    source источник
comment
Рад, что ты получил это самостоятельно! Вы должны добавить ответ на свой вопрос ниже и принять его!   -  person Jordan Kasper    schedule 17.12.2019


Ответы (1)


Мне удалось успешно протестировать исключение, я делюсь ответом, если кому-то интересно

QUnit.test("Invalid string input throws SyntaxError", function (assert) {
        assert.throws(
            function () {
                DurationParser.parse(new String(''));
            },
            function (error) {
                return error.name === "SyntaxError";
            }
        );
    });  

Веб-сайт QUnit совершенно не помог, я понял это, просто попробовав разные варианты этого синтаксиса.

person Poyraz Kürkçüoğlu    schedule 02.01.2020