Javascript 在QUnit中断言异常

Javascript 在QUnit中断言异常,javascript,unit-testing,qunit,assertion,throws,Javascript,Unit Testing,Qunit,Assertion,Throws,我正在进行一个单元测试,测试从语法生成的解析器代码。(通过PegJS生成) 我几乎完成了大部分可能的案例。剩下2-3个异常,它们应该抛出异常,但我似乎不知道如何断言异常 (function () { "use strict"; QUnit.module('durationTests'); QUnit.test('durationParseTest', function (assert) { var dp1 = DurationParser.pars

我正在进行一个单元测试,测试从语法生成的解析器代码。(通过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网站上尝试了许多建议的方法,但仍然不知道如何正确地测试特殊异常。

我成功地测试了异常,如果有人感兴趣,我会分享答案

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

QUnit网站一点帮助都没有,我只是通过尝试这种语法的不同变体就找到了答案。

很高兴你自己得到了这个!你应该在下面的问题中添加一个答案,然后接受它!