我是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");
});
测试应该通过,因为会抛出错误。
答案 0 :(得分:16)
有些事情是错误的,一个有效的例子是http://jsfiddle.net/Z8QxA/1/
主要问题是你将错误的东西作为第二个参数传递给raises()
。 second argument用于验证是否已抛出正确的错误,因此它要么是正则表达式,要么是错误类型的构造函数,要么是允许您自己进行验证的回调。
因此,在您的示例中,您传递attrToggle
作为将被抛出的错误类型。您的代码实际上会抛出Error
类型,因此检查实际上失败了。传递Error
作为第二个参数可以按照您的意愿工作:
test("a test", function () {
raises(function () {
attrToggle([], []);
}, Error, "Must throw error to pass.");
});
其次,在throw
内调用attrToggle()
时,您不需要raises()
关键字。
答案 1 :(得分:1)
raises()
在测试代码时需要抛出错误。
通常我使用try-catch
来捕获不正确的参数类型。我使用raises()
来测试throw
。如果我将一个不正确的值作为参数,并且测试不符合raises()
,那么就没有抓到一些东西。