Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 节点assert.throws未捕获异常_Unit Testing_Node.js - Fatal编程技术网

Unit testing 节点assert.throws未捕获异常

Unit testing 节点assert.throws未捕获异常,unit-testing,node.js,Unit Testing,Node.js,鉴于此代码: var assert = require('assert'); function boom(){ throw new Error('BOOM'); } assert.throws( boom(), Error ); 我得到这个输出,节点为0.4.9: node.js:134 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: BOOM

鉴于此代码:

var assert = require('assert');

function boom(){
    throw new Error('BOOM');
}

assert.throws( boom(), Error );
我得到这个输出,节点为0.4.9:

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: BOOM
    at boom ([EDITED]/assert.throws.test.js:4:9)
    at Object.<anonymous> ([EDITED]/assert.throws.test.js:7:17)
    at Module._compile (module.js:402:26)
    at Object..js (module.js:408:10)
    at Module.load (module.js:334:31)
    at Function._load (module.js:293:12)
    at Array.<anonymous> (module.js:421:10)
    at EventEmitter._tickCallback (node.js:126:26)
但是,在给定特定输入的情况下,如何测试它是否抛出异常?例如:

var assert = require('assert');

function boom(blowup){
    if(blowup)
        throw new Error('BOOM');
}

assert.throws( boom, Error );

这将失败。我做错了什么,或者除了我大家都知道什么秘密?

示例以函数为例,而示例代码调用函数并传递结果。异常发生在断言查看它之前

将代码更改为:

var assert = require('assert');

function boom(){
    throw new Error('BOOM');
}

assert.throws( boom, Error ); // note no parentheses
编辑:要传递参数,只需创建另一个函数。毕竟,这是javascript

var assert = require('assert');

function boom(blowup){
    if(blowup)
        throw new Error('BOOM');
}

assert.throws( function() { boom(true); }, Error );
您可以使用bind():

有了这些论点:

assert.throws( boom.bind(null, "This is a blowup"), Error );
当前节点稳定(v4.1)默认包括胖箭头功能支持(无需任何
--harmony
标志),因此您可以执行以下操作:

assert.throws(()=>boom(), Error);
assert.throws(()=>boom(true), Error); // with params

即使在
boom()
后面有括号(因此实际上是在调用它,而不是传递对函数对象的引用),使用fat arrow函数也会将它包装在一个块中,这就是assert.throws所期望的。

这与人们使用其他断言摩卡/柴的问题密切相关。有关
节点
示例的描述,请参见此答案:

这就是我的第二个示例所演示的。这是有意义的,因为它需要在受控环境中调用测试函数。但是,如果函数需要输入才能抛出异常,比如我的第三个示例,那该怎么办呢?好吧,只要做javascript擅长的事情:创建新函数,就像我的editAh一样,我现在明白了。谢谢非常感谢您提到使用附加参数。这是一个很难了解的细节。我可能不会尝试,也不会寻找其他方法,所以再次感谢你。我在一个完全不同的领域有完全相同的根本原因(邮递员脚本),所以感谢你让我发现了它
assert.throws( boom.bind(null, "This is a blowup"), Error );
assert.throws(()=>boom(), Error);
assert.throws(()=>boom(true), Error); // with params