【问题标题】:Asserting that a function throws exceptions with Qunit用 Qunit 断言函数抛出异常
【发布时间】:2012-04-28 17:50:07
【问题描述】:

我是 Qunit 和单元测试的新手。

我想弄清楚什么以及如何测试以下功能。目前它并没有做太多,但我想断言,如果我传递不正确的值,则会引发错误:

function attrToggle (panel, attr) {
    'use strict';

    if (!panel) { throw new Error('Panel is not defined'); }
    if (!attr) { throw new Error('Attr is not defined'); }
    if (typeof panel !== 'string') { throw new Error('Panel is not a string'); }
    if (typeof attr !== 'string') { throw new Error('Attr is not a string'); }
    if (arguments.length !== 2) { throw new Error('There should be only two arguments passed to this function')}

};

如果不满足这些条件中的任何一个,我该如何断言将引发错误?

我试图查看 Qunit 的“加注”断言,但认为我误解了它。我的解释是,如果抛出错误,则测试通过。

所以如果我测试这样的东西:

test("a test", function () {
    raises(function () {
        throw attrToggle([], []);
    }, attrToggle, "must throw error to pass");
});

测试应该通过,因为会抛出错误。

【问题讨论】:

    标签: javascript jquery unit-testing qunit


    【解决方案1】:

    有几处错误,一个工作示例位于http://jsfiddle.net/Z8QxA/1/

    主要问题是您将错误的东西作为第二个参数传递给raises()second argument 用于验证是否抛出了正确的错误,因此它需要一个正则表达式、错误类型的构造函数或允许您自己验证的回调。

    因此,在您的示例中,您将 attrToggle 作为将引发的错误类型传递。您的代码实际上抛出了 Error 类型,因此检查实际上失败了。传递Error 作为第二个参数可以按您的意愿工作:

    test("a test", function () {
        raises(function () {
            attrToggle([], []);
        }, Error, "Must throw error to pass.");
    });
    

    其次,在raises() 中调用attrToggle() 时不需要throw 关键字。

    【讨论】:

      【解决方案2】:

      是的,你几乎是对的。 raises() 期望在您测试代码时抛出错误。

      通常我在函数中使用try-catch 来捕获不正确的参数类型。我使用raises() 来测试throw。如果我将不正确的值作为参数,并且测试不符合raises(),则没有捕获到某些内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 2023-01-11
        • 2021-09-20
        • 1970-01-01
        • 2019-09-03
        • 1970-01-01
        • 2017-03-09
        相关资源
        最近更新 更多