assert模块提供了一组简单的断言测试,分严格模式(strict)和遗留模式(legacy),严格模式下,对比的方式比较严格,好比说,0与'0'比较,会报错,但在遗留模式下是能够经过的。官方推荐使用严格模式, 因此本文基于strict模式下学习。git
const assert = require('assert').strict; // 严格模式 assert.equal(0, '0') // error
全局使用strict模式后,assert.equal()
与assert.strictEqual()
的效果是同样的。
若是不想全局使用的话,能够直接使用带strict的方法。github
const assert = require('assert') // 遗留模式 assert.equal(0, '0') // success assert.strictEqual(0, '0') // error
Error
的子类,表示断言失败,assert模块抛出的错误都是AssertionError
的实例。正则表达式
相似于下面这个class,实际上的AssertionError
是由ES5写的,下面这个只是方便理解传入的参数promise
interface IOptions { message?: string; // 设置错误的信息 actual?: any; // 设置错误实例上的实际值 expected?: any; // 设置错误实例上的指望值 operator?: string; // 设置用于比较的操做或触发错误的断言函数 stackStartFn(): any; // 生成的堆栈跟踪将移除全部帧直到提供的函数 } class AssertionError extends Error { constructor(options: IOptions) { // ... } }
检测是否为真值,是assert.ok的别名。异步
检测value是否为真值。
若是不为真值,抛出属性message
为message
参数值的AssertionError
,若是未定义,为默认错误信息。
若是是Error的实例,则抛出Error实例。(如下关于message的使用都同样)async
检测 actual
参数和expected
参数之间的严格相等性,使用sameValue比较。函数
检测actual
参数和expected
参数之间的深度严格相等性,深度比较意味着子对象的可枚举的自身属性也经过如下规则进行递归计算。学习
检测 actual
参数和expected
参数之间的严格不相等性,使用sameValue比较。测试
检测actual
参数和expected
参数之间的深度严格不相等性,深度比较意味着子对象的可枚举的自身属性也经过如下规则进行递归计算。ui
使用提供的错误消息或默认错误消息抛出 AssertionError。
检测fn函数抛出的错误是否与预期的错误error同样。
fn为一个会抛出错误的函数
error能够为多种类型,做为与抛出的错误对比的样本。
assert.throws(() => { throw new Error('it is a error') }, /^Error: it is a error$/);
assert.throws(() => { throw new Error('it is a error') }, (err) => { if ((err instanceof Error) && /error/.test(err)) { return true; } });
const err = new TypeError('错误值'); err.code = 404; err.foo = 'bar'; err.info = { nested: true, baz: 'text' }; err.reg = /abc/i; // 正则表达式只有当验证对象包含相同的正则表达式时才经过。 assert.throws(() => { throw err; }, { name: 'TypeError', message: '错误值' info: { nested: true, baz: 'text' // 使用嵌套对象须要存在全部属性。 // 不然验证将失败。 // 没法对嵌套属性使用正则表达式! } });
注意, error 不能是字符串。 若是提供了一个字符串做为第二个参数,则假定 error 被忽略,而字符串将用于 message。
assert.throws
的异步版本。
当即执行该函数,若是该函数不返回promise,则返回一个被拒绝(reject)的 Promise。
若是该函数同步抛出一个错误,返回一个带有该错误的被拒绝的 Promise。
等待Promise执行,检测是否被拒绝。
若是value
不为null
或者undefined
就将value
做为错误抛出。
在回调中测试error
参数时,这颇有用。