在QUnit中测试SyntaxError异常的最佳方法是什么?

时间:2014-02-06 17:13:09

标签: javascript jquery json testing qunit

我在HTML数据元素中有一些JSON数据:

<div id="ps-data" data-ps="
        {
            "teacherId": 12345678
        },
"></div>

我使用jQuery的parseJSON函数解析它,但如果我传递它无效的JSON,我会得到一个SyntaxError异常。在QUnit中,这显示为全局故障,但我希望它在我的一个测试用例中失败。最好的方法是什么?

我的解析代码如下:

$.parseJSON($('#ps-data').data().ps);

2 个答案:

答案 0 :(得分:1)

你可以这样做:

var exeptionReached = false;
try {
    $.parseJSON($('#ps-data').data().ps);
} catch(e) {
    exceptionReached = true;
}
console.log(exceptionReached); //will be true if `parseJSON()` threw an exception

使用qunit来声明异常已经达到...或者如果你想假设某些特定的东西,你可以保存异常对象中的东西,例如:

var ex;
try {
    $.parseJSON($('#ps-data').data().ps);
} catch(e) {
    ex = e;
}
console.log(ex.message); // something like "Unexpected token ,"

在访问课程属性之前,您需要检查ex是否已定义。我认为您应该能够看到如何测试异常是否发生以及如何根据需要测试该异常的具体内容......但如果您有任何其他问题,请告诉我。

JSFiddle example

答案 1 :(得分:0)

以下是基于smerny答案的我正在做的完整示例。

function testParse() {
    var exceptionMsg;
    try {
        var data = $j.parseJSON($j('#ps-data').data().ps);
    } catch (e) {
        exceptionMsg = e.message;
    }
    return exceptionMsg;
}

strictEqual(testParse(), undefined, 'ps data parses with no exceptions');

这会在失败时显示异常消息。