assert模块提供了一组简单的断言测试,分严格模式(strict)和遗留模式(legacy),严格模式下,对比的方式比较严格,比如说,0与'0'比较,会报错,但在遗留模式下是可以通过的。官方推荐使用严格模式, 所以本文基于strict模式下学习。
如何使用严格模式
全局使用strict模式后,assert.equal() 与assert.strictEqual()的效果是一样的。
如果不想全局使用的话,可以直接使用带strict的方法。
assert.AssertionError
Error的子类,表示断言失败,assert模块抛出的错误都是AssertionError的实例。
类似于下面这个class,实际上的AssertionError是由ES5写的,下面这个只是方便理解传入的参数
assert(value: any, message?: string | Error)
检测是否为真值,是assert.ok的别名。
assert.ok(value: any, message?: string | Error)
检测value是否为真值。
如果不为真值,抛出属性message为message参数值的AssertionError,如果未定义,为默认错误信息。
如果是Error的实例,则抛出Error实例。(以下关于message的使用都一样)
assert.strictEqual(actual: any, expected: any, message?: string | Error)
检测 actual参数和expected参数之间的严格相等性,使用sameValue比较。
assert.deepStrictEqual(actual: any, expected: any, message?: string | Error)
检测actual参数和expected参数之间的深度严格相等性,深度比较意味着子对象的可枚举的自身属性也通过以下规则进行递归计算。
assert.notStrictEqual(actual: any, expected: any, message?: string | Error)
检测 actual参数和expected参数之间的严格不相等性,使用sameValue比较。
assert.notDeepStrictEqual(actual: any, expected: any, message?: string | Error)
检测actual参数和expected参数之间的深度严格不相等性,深度比较意味着子对象的可枚举的自身属性也通过以下规则进行递归计算。
assert.fail(message?: string | Error = 'failed')
使用提供的错误消息或默认错误消息抛出 AssertionError。
assert.throws(fn: function, error?: regExp | function | object | Error, message?: string)
检测fn函数抛出的错误是否与预期的错误error一样。
fn为一个会抛出错误的函数
error可以为多种类型,作为与抛出的错误对比的样本。
为regExp时,可以匹配抛出的错误。
为function时,可以自定义验证函数
为object时,将仅测试验证对象error上的属性。
为Error时,用instanceof检测是否是该实例。
注意, error 不能是字符串。 如果提供了一个字符串作为第二个参数,则假定 error 被忽略,而字符串将用于 message。
assert.reject(asyncFn: function | promise, error?: regExp | function | object | Error, message?: string)
assert.throws的异步版本。
asyncFn为一个function时
立即执行该函数,如果该函数不返回promise,则返回一个被拒绝(reject)的 Promise。
如果该函数同步抛出一个错误,返回一个带有该错误的被拒绝的 Promise。
asyncFn为一个Promise时
等待Promise执行,检测是否被拒绝。
assert.ifError(value: any)
如果value不为null或者undefined就将value作为错误抛出。
在回调中测试error参数时,这很有用。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。
新闻热点
疑难解答