nodejs assert 模块
assert模块是Node的内置模块,主要用于断定。如果表达式不符合预期,就抛出一个错误。该模块提供11个方法,但只有少数几个是常用的。
1.assert()
assert(value[, message])
assert.ok()
的别名,ok是assert方法的另一个名字,与assert方法完全一样。
assert方法接受两个参数,当第一个参数对应的布尔值为true时,不会有任何提示,返回undefined。当第一个参数对应的布尔值为false时,会抛出一个错误,该错误的提示信息就是第二个参数设定的字符串
// 格式 assert(value, message) // 例子 var assert = require('assert'); function add (a, b) { return a + b; } var expected = add(1,2); assert( expected === 3, '预期1加2等于3');
上面代码不会有任何输出,因为assert方法的第一个参数是true。
assert( expected === 4, '预期1加2等于3') // AssertionError: 预期1加2等于3
上面代码会抛出一个错误,因为assert方法的第一个参数是false。
2.assert.throws(block[, error][, message])
断定 block
函数会抛出错误(通俗解释throws方法预期某个代码块会抛出一个错误,且抛出的错误符合指定的条件。)。
error
参数可以是构造函数、正则表达式、或自定义函数。
如果指定了 message
参数,则当 block
函数不抛出错误时,message
参数会作为 AssertionError
的错误信息。
1 // 格式 2 assert.throws(block, [error], [message]) 3 4 // 例一,抛出的错误符合某个构造函数 5 assert.throws( 6 function() { 7 throw new Error("Wrong value"); 8 }, 9 Error, 10 '不符合预期的错误类型' 11 ); 12 13 // 例二、抛出错误的提示信息符合正则表达式 14 assert.throws( 15 function() { 16 throw new Error("Wrong value"); 17 }, 18 /value/, 19 '不符合预期的错误类型' 20 ); 21 22 // 例三、抛出的错误符合自定义函数的校验 23 assert.throws( 24 function() { 25 throw new Error("Wrong value"); 26 }, 27 function(err) { 28 if ( (err instanceof Error) && /value/.test(err) ) { 29 return true; 30 } 31 }, 32 '不符合预期的错误类型' 33 );
error
参数不能是字符串。 如果第二个参数是字符串,则视为省略 error
参数,传入的字符串会被用于 message
参数。 例如:
1 // 这是错误的!不要这么做! 2 assert.throws(myFunction, '错误信息', '没有抛出期望的信息'); 3 4 // 应该这么做。 5 assert.throws(myFunction, /错误信息/, '没有抛出期望的信息');
3.assert.doesNotThrow(block[, error][, message])
断定 block
函数不会抛出错误。
当 assert.doesNotThrow()
被调用时,它会立即调用 block
函数。
如果抛出错误且错误类型与 error
参数指定的相同,则抛出 AssertionError
。 如果错误类型不相同,或 error
参数为 undefined
,则抛出错误(通俗解释doesNotThrow方法与throws方法正好相反,预期某个代码块不抛出错误。)。
1 // 格式 2 assert.doesNotThrow(block, [message]) 3 4 // 用法 5 assert.doesNotThrow( 6 function() { 7 console.log("Nothing to see here"); 8 }, 9 '预期不抛出错误' 10 );
以下例子会抛出 TypeError
,因为在断定中没有匹配的错误类型:
1 assert.doesNotThrow( 2 () => { 3 throw new TypeError('错误信息'); 4 }, 5 SyntaxError 6 );
以下例子会抛出一个带有 Got unwanted exception (TypeError)..
信息的 AssertionError
:因为错误类型相同
1 assert.doesNotThrow( 2 () => { 3 throw new TypeError('错误信息'); 4 }, 5 TypeError 6 );
如果抛出了 AssertionError
且有给 message
参数传值,则 message
参数的值会被附加到 AssertionError
的信息中:
1 assert.doesNotThrow( 2 () => { 3 throw new TypeError('错误信息'); 4 }, 5 TypeError, 6 '抛出错误' 7 ); 8 // 抛出 AssertionError: Got unwanted exception (TypeError). 抛出错误