我是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')} };
如果没有满足这些条件,我该如何断言会抛出错误?
我试图看看库尼特的“提出”断言,但认为我误会了.我的解释是,如果抛出错误,测试通过.
所以如果我测试了这样的东西:
test("a test",function () { raises(function () { throw attrToggle([],[]); },attrToggle,"must throw error to pass"); });
测试应该通过,因为错误被抛出.
解决方法
一些事情错了,一个工作的例子是
http://jsfiddle.net/Z8QxA/1/
主要的问题是你把错误的东西作为第二个参数传递给了raise(). second argument用于验证正确的错误是否被抛出,因此它可能要求正则表达式,错误类型的构造函数或允许您进行自己的验证的回调.
所以在你的例子中,你正在传递attrToggle作为抛出的错误类型.你的代码实际上会抛出一个错误类型,所以检查实际上是失败的.传递错误作为第二个参数的工作原理:
test("a test",function () { raises(function () { attrToggle([],Error,"Must throw error to pass."); });
其次,在raise()中调用attrToggle()时,不需要throw关键字.