学习node.js 断言的使用详解

2020-06-17 05:47:49易采站长站整理

assert.fail(message?: string | Error = ‘failed’)

使用提供的错误消息或默认错误消息抛出 AssertionError。

assert.throws(fn: function, error?: regExp | function | object | Error, message?: string)

检测fn函数抛出的错误是否与预期的错误error一样。

fn为一个会抛出错误的函数

error可以为多种类型,作为与抛出的错误对比的样本。

为regExp时,可以匹配抛出的错误。


assert.throws(() => {
throw new Error('it is a error')
}, /^Error: it is a error$/);

为function时,可以自定义验证函数


assert.throws(() => {
throw new Error('it is a error')
}, (err) => {
if ((err instanceof Error) && /error/.test(err)) {
return true;
}
});

为object时,将仅测试验证对象error上的属性。


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时,用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参数时,这很有用。