当前位置: 首页 > 后端技术 > Node.js

学习node.js断言的使用

时间:2023-04-03 22:33:02 Node.js

assert模块提供了一套简单的断言测试,分为严格模式(strict)和遗留模式(legacy)。在严格模式下,比较方式比较严格,比如0和'0'比较,会报错,但是在legacy模式下是可以通过的。官方推荐使用严格模式,所以本文以严格模式学习为主。如何使用严格模式constassert=require('assert').strict;//严格模式assert.equal(0,'0')//错误全局使用严格模式后,assert.equal()和assert.strictEqual()效果是一样的。如果不想全局使用,可以直接使用strict方法。constassert=require('assert')//Legacy模式assert.equal(0,'0')//successassert.strictEqual(0,'0')//errorassert.AssertionErrorError的子类,表示断言失败,assert模块抛出的所有错误都是AssertionError的实例。类似下面的类,实际的AssertionError是ES5写的,下面只是为了方便理解传入的参数interfaceIOptions{message?:string;//设置错误信息actual?:any;//设置预期的错误实例?:any;//设置错误实例运算符的预期值?:字符串;//设置用于比较的操作或触发错误的断言函数stackStartFn():any;//生成的堆栈跟踪将被删除所有帧,直到提供的函数}classAssertionErrorextendsError{constructor(options:IOptions){//...}}assert(value:any,message?:string|Error)检查是否没错,它是assert.ok的别名。assert.ok(value:any,message?:string|Error)检查值是否为真。如果不为真,则抛出一个AssertionError,其属性message是message参数的值。如果未定义,则为默认错误消息。如果它是Error的实例,则抛出Error的实例。(下面message的用法同上)assert.strictEqual(actual:any,expected:any,message?:string|Error)检测实参和期望参数严格相等,使用sameValue进行比较。assert.deepStrictEqual(actual:any,expected:any,message?:string|Error)检测实参和期望参数深度严格相等,深度比较意味着子对象的可枚举自身属性也通过以下rules做递归计算。assert.notStrictEqual(actual:any,expected:any,message?:string|Error)使用sameValue比较检测实际参数和预期参数之间的严格不等式。assert.notDeepStrictEqual(actual:any,expected:any,message?:string|Error)检测实参和期望参数深度严格不等式,深度比较意味着子对象的可枚举自身属性也通过以下规则递归评估。assert.fail(message?:string|Error='failed')使用提供的错误消息或默认错误消息抛出AssertionError。assert.throws(fn:function,error?:regExp|function|object|Error,message?:string)检查fn函数抛出的错误是否与预期的error错误相同。fn是一个可以抛出错误的函数,错误可以是多种类型,作为与抛出的错误进行比较的样本。为regExp时,可以匹配抛出的错误。assert.throws(()=>{thrownewError('这是一个错误')},/^Error:这是一个错误$/);当是函数时,可以自定义验证函数assert.throws(()=>{thrownewError('是错误')},(err)=>{if((errinstanceofError)&&/error/.test(err)){返回true;}});对于对象,只会测试验证对象错误的属性。consterr=newTypeError('错误值');错误代码=404;err.foo='酒吧';err.info={nested:true,baz:'text'};err.reg=/abc/i;//仅当验证对象包含相同的正则表达式时,正则表达式才会通过。assert.throws(()=>{throwerr;},{name:'TypeError',message:'errorvalue'info:{nested:true,baz:'text'//使用嵌套对象需要所有属性present。//否则,验证将失败。//正则表达式不能用于嵌套属性!}});当为Error时,使用instanceof判断是否为实例。请注意,错误不能是字符串。如果将字符串作为第二个参数提供,则假定错误被忽略并且该字符串将用于消息。assert.reject(asyncFn:function|promise,error?:regExp|function|object|Error,message?:string)assert.throws的异步版本。当asyncFn是一个函数时,该函数会被立即执行,如果该函数没有返回一个promise,则返回一个被拒绝的Promise。如果函数同步抛出错误,则返回带有该错误的被拒绝的Promise。当asyncFn是一个Promise时,它??会等待Promise被执行并检查它是否被拒绝。assert.ifError(value:any)如果值不为空或未定义,则将值作为错误抛出。这在测试回调中的错误参数时很有用。