Node.js——assert断言模块

张开发
2026/4/11 2:59:18 15 分钟阅读

分享文章

Node.js——assert断言模块
assert断言模块1、equal()和notEqual()2、strictEqual()与notStrictEqual()3、assert()与ok()4、deepEqual()与notDeepEqual()5、throws()与doesNotThrow()在Node.js中可以利用assert模块进行断言处理即书写一些判断用测试代码如果判断结果为假则抛出AssertionError异常。接下来我们对assert模块中的所有方法进行详细介绍。1、equal()和notEqual()注意equal方法与notEqual方法仅对两个值进行比较判断并不连同两个值的数据类型一起判断。例如对值1与“1”进行判断时判断结果为真。equal方法用于判断两个值是否相等在Node.js内部使用“”操作符进行判断使用方式如下所示assert.equal(actual,expected,[message])actual实际值expected预期值message可选指定自定义异常信息constassertrequire(assert);console.log(assert.equal(1,2));AssertionError [ERR_ASSERTION]: 1 2 at Object.anonymous (/Users/acton_zhang/前端/vscodeworkspace/node/demo/index.js:2:20) at Module._compile (internal/modules/cjs/loader.js:1118:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1138:10) at Module.load (internal/modules/cjs/loader.js:982:32) at Function.Module._load (internal/modules/cjs/loader.js:875:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12) at internal/main/run_main_module.js:17:47 { generatedMessage: true, code: ERR_ASSERTION, actual: 1, expected: 2, operator: }notEqual方法的作用与equal方法的作用相反用于判断两个值是否不相等在Node.js内部使用“!”操作符进行判断使用方式如下所示。assert.notEqual(actual,expected,[message])actual实际值expected预期值message可选指定自定义异常信息constassertrequire(assert);console.log(assert.notEqual(1,1));at Object.anonymous (/Users/acton_zhang/前端/vscodeworkspace/node/demo/index.js:2:20) at Module._compile (internal/modules/cjs/loader.js:1118:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1138:10) at Module.load (internal/modules/cjs/loader.js:982:32) at Function.Module._load (internal/modules/cjs/loader.js:875:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12) at internal/main/run_main_module.js:17:47 { generatedMessage: true, code: ERR_ASSERTION, actual: 1, expected: 1, operator: ! }2、strictEqual()与notStrictEqual()如果需要对两个值及其数据类型是否相等进行判断则需要使用strictEqual方法在Node.js内部使用“”操作符进行判断​代码如下所示assert.strictEqual(actual,expected,[message])actual实际值expected预期值message可选指定自定义异常信息constassertrequire(assert);console.log(assert.strictEqual(1,1));at Object.anonymous(/Users/acton_zhang/前端/vscodeworkspace/node/demo/index.js:2:20)at Module._compile(internal/modules/cjs/loader.js:1118:30)at Object.Module._extensions..js(internal/modules/cjs/loader.js:1138:10)at Module.load(internal/modules/cjs/loader.js:982:32)at Function.Module._load(internal/modules/cjs/loader.js:875:14)at Function.executeUserEntryPoint[asrunMain](internal/modules/run_main.js:71:12)at internal/main/run_main_module.js:17:47{generatedMessage:true,code:ERR_ASSERTION,actual:1,expected:1,operator:strictEqual}notStrictEqual方法的作用与strictEqual方法的作用相反用于判断两个值及其数据类型是否不等Node.js内部使用“!”操作符进行判断使用方式如下所示。assert.notStrictEqual(actual,expected,[message])actual实际值expected预期值message可选指定自定义异常信息constassertrequire(assert);console.log(assert.notStrictEqual(1,1));at Object.anonymous(/Users/acton_zhang/前端/vscodeworkspace/node/demo/index.js:2:20)at Module._compile(internal/modules/cjs/loader.js:1118:30)at Object.Module._extensions..js(internal/modules/cjs/loader.js:1138:10)at Module.load(internal/modules/cjs/loader.js:982:32)at Function.Module._load(internal/modules/cjs/loader.js:875:14)at Function.executeUserEntryPoint[asrunMain](internal/modules/run_main.js:71:12)at internal/main/run_main_module.js:17:47{generatedMessage:true,code:ERR_ASSERTION,actual:1,expected:1,operator:notStrictEqual}3、assert()与ok()ok方法是一种简洁的判断方法用于直接判断某个值是否为真如果为假则抛出AssertionError异常使用方式如下所示assert.ok(value,[message])value断言的值message可选自定义异常constassertrequire(assert);console.log(assert.ok(1));console.log(assert.ok(false));at Object.anonymous(/Users/acton_zhang/前端/vscodeworkspace/node/demo/index.js:3:20)at Module._compile(internal/modules/cjs/loader.js:1118:30)at Object.Module._extensions..js(internal/modules/cjs/loader.js:1138:10)at Module.load(internal/modules/cjs/loader.js:982:32)at Function.Module._load(internal/modules/cjs/loader.js:875:14)at Function.executeUserEntryPoint[asrunMain](internal/modules/run_main.js:71:12)at internal/main/run_main_module.js:17:47{generatedMessage:true,code:ERR_ASSERTION,actual:false,expected:true,operator:}另外可以使用assert方法来代替assert.ok方法使用方式如下所示assert(value,[message])value断言的值message可选自定义异常constassertrequire(assert);console.log(assert(1));console.log(assert(false));at Object.anonymous(/Users/acton_zhang/前端/vscodeworkspace/node/demo/index.js:3:13)at Module._compile(internal/modules/cjs/loader.js:1118:30)at Object.Module._extensions..js(internal/modules/cjs/loader.js:1138:10)at Module.load(internal/modules/cjs/loader.js:982:32)at Function.Module._load(internal/modules/cjs/loader.js:875:14)at Function.executeUserEntryPoint[asrunMain](internal/modules/run_main.js:71:12)at internal/main/run_main_module.js:17:47{generatedMessage:true,code:ERR_ASSERTION,actual:false,expected:true,operator:}4、deepEqual()与notDeepEqual()在Node.js中可以使用deepEqual方法进行深层次的比较使用方法如下所示assert.deepEqual(actual,expected,[message])actual实际值expected预期值message可选指定自定义异常信息比较规则如下如果对两个简单类型的值进行比较字符串、数值、布尔值、null与undefined​则内部使用“”操作符进行判断。如果对两个数组进行比较则内部使用“”操作符进行判断。如果对两个对象进行比较则将它们的属性长度和属性值进行比较。如果对两个缓存区对象进行比较则先比较它们的长度然后逐字节比较缓存区中的内容。constassertrequire(assert);console.log(assert.deepEqual([1,2,3],[1,2,3]));console.log(assert.deepEqual({name:tom,age:18},{name:tom,age:17}));at Object.anonymous(/Users/acton_zhang/前端/vscodeworkspace/node/demo/index.js:3:20)at Module._compile(internal/modules/cjs/loader.js:1118:30)at Object.Module._extensions..js(internal/modules/cjs/loader.js:1138:10)at Module.load(internal/modules/cjs/loader.js:982:32)at Function.Module._load(internal/modules/cjs/loader.js:875:14)at Function.executeUserEntryPoint[asrunMain](internal/modules/run_main.js:71:12)at internal/main/run_main_module.js:17:47{generatedMessage:true,code:ERR_ASSERTION,actual:[Object],expected:[Object],operator:deepEqual}notDeepEqual方法的作用与deepEqual方法相反它用于深层判断两个值是否不等比较规则与deepEqual方法使用的比较规则相同使用方式如下所示。assert.notDeepEqual(actual,expected,[message])actual实际值expected预期值message可选指定自定义异常信息constassertrequire(assert);console.log(assert.notDeepEqual([1,2,3],[1,2,3]));console.log(assert.notDeepEqual({name:tom,age:18},{name:tom,age:17}));]at Object.anonymous(/Users/acton_zhang/前端/vscodeworkspace/node/demo/index.js:2:20)at Module._compile(internal/modules/cjs/loader.js:1118:30)at Object.Module._extensions..js(internal/modules/cjs/loader.js:1138:10)at Module.load(internal/modules/cjs/loader.js:982:32)at Function.Module._load(internal/modules/cjs/loader.js:875:14)at Function.executeUserEntryPoint[asrunMain](internal/modules/run_main.js:71:12)at internal/main/run_main_module.js:17:47{generatedMessage:true,code:ERR_ASSERTION,actual:[Array],expected:[Array],operator:notDeepEqual}5、throws()与doesNotThrow()throws方法用于执行一个函数中的代码并判断该函数中是否会抛出一个异常如果判断结果为真函数中抛出异常​则不抛出AssertionError异常如果判断为假函数中不抛出异常​则抛出AssertionError异常。assert.throws(block,[error],[message])block一个函数如果该函数中抛出异常则不抛出AssertionError异常。如果该函数中不抛出异常则throws方法抛出AssertionError异常。error可选一个返回true或返回false的函数用于控制是否抛出在第一个参数值函数中指定抛出的异常如果第二个参数值返回false则抛出该异常。message可选自定义错误信息constassertrequire(assert);assert.throws((){leti1/0;console.log(Im an error);},(){returnfalse});at Object.anonymous(/Users/acton_zhang/前端/vscodeworkspace/node/demo/index.js:2:8)at Module._compile(internal/modules/cjs/loader.js:1118:30)at Object.Module._extensions..js(internal/modules/cjs/loader.js:1138:10)at Module.load(internal/modules/cjs/loader.js:982:32)at Function.Module._load(internal/modules/cjs/loader.js:875:14)at Function.executeUserEntryPoint[asrunMain](internal/modules/run_main.js:71:12)at internal/main/run_main_module.js:17:47{generatedMessage:false,code:ERR_ASSERTION,actual:undefined,expected:[Function(anonymous)],operator:throws}doesNotThrow方法用于执行一个函数中的代码并判断该函数是否不会抛出一个异常如果判断为真函数中不抛出异常​则正常执行该函数如果判断为假函数中抛出异常​则抛出该异常或AssertionError异常根据doesNotThrow方法中的第二个参数而定​。assert.doesNotThrow(block,[error],[message])block一个函数如果该函数中抛出异常且不指定第二个参数及第三个参数则抛出该异常error可选一个返回true或false的函数用于控制是抛出在第一个参数值函数中指定抛出的异常还是抛出AssertionError异常如果第二个参数值返回false则抛出该异常message可选自定义错误信息constassertrequire(assert);assert.doesNotThrow((){leti1/0;console.log(Im an error);},(){returnfalse});Im an errordoesNotThrow方法的第二个参数值也可以为正则表达式的验证函数regex.test函数​如果验证结果为假则抛出第一个参数值函数中指定抛出的异常。

更多文章