• Node.js Video Tutorials

Node.js - assert.doesNotThrow() 函数



Node.js 的 `assert.doesNotThrow()` 函数断言作为参数传递给 `fn` 的函数不会抛出错误。

使用 `assert.doesNotThrow()` 函数并没有什么用,因为它捕获错误后再抛出并没有实际好处。相反,当为不应抛出错误的特定代码添加注释时,它会更具表达性。

语法

以下是 **Node.js assert.doesNotThrow() 函数** 的语法:

assert.doesNotThrow(fn[, error][, message]);

参数

此函数接受三个参数,如下所述。

  • **fn** − (必填) 此参数包含一个函数 `fn`,并期望该函数不会抛出错误。

  • **error** − (可选) 此参数可以是 **RegExp、验证函数**。

  • **message** − (可选) 可以将 `String` 或 `Error` 类型作为输入传递给此参数。

返回值

此函数断言函数 `fn` 不会抛出错误。如果抛出错误,则会有两种情况:

  • 如果错误类型与 `error` 参数相同,则 `assert.doesNotThrow()` 函数会向输出抛出一个 `AssertionError`。

  • 如果未传递 `error` 参数或错误类型不匹配,则会向调用者传播错误。

示例

在下面的示例中,我们创建一个函数,并在函数内部调用 `TypeError`。

const assert = require('assert').strict;
function func(){
   throw new TypeError('Error...');
};
assert.doesNotThrow( () => { func(); }, TypeError );

输出

执行上述程序后,它将导致出现包含消息“出现意外异常”的 `AssertionError`。

assert.js:79
   throw new AssertionError(obj);
   ^
   
AssertionError [ERR_ASSERTION]: Got unwanted exception.
Actual message: "Error..."
   at Object.<anonymous> (/home/cg/root/639c2bf348ea8/main.js:7:8)
   at Module._compile (internal/modules/cjs/loader.js:702:30)
   at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
   at Module.load (internal/modules/cjs/loader.js:612:32)
   at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
   at Function.Module._load (internal/modules/cjs/loader.js:543:3)
   at Function.Module.runMain (internal/modules/cjs/loader.js:744:10)
   at startup (internal/bootstrap/node.js:238:19)
   at bootstrapNodeJSCore (internal/bootstrap/node.js:572:3)

示例

在下面的示例中,我们创建一个函数,并在函数内部调用 `TypeError`。但是 `error` 参数持有 `SyntaxError` 而不是 `TypeError`,它们是不同类型的错误。

const assert = require('assert');
function func(){
   throw new TypeError('Error...');
}
assert.doesNotThrow( () => { func() }, SyntaxError);

输出

执行上述程序后,函数将抛出 `TypeError` 而不是 `AssertionError`,因为断言中没有匹配的错误类型。

assert.js:604
   throw actual;
   ^
   
TypeError: Error...
   at func (/home/cg/root/639c2bf348ea8/main.js:4:9)
   at assert.doesNotThrow (/home/cg/root/639c2bf348ea8/main.js:7:30)
   at getActual (assert.js:497:5)
   at Function.doesNotThrow (assert.js:616:32)
   at Object.<anonymous> (/home/cg/root/639c2bf348ea8/main.js:7:8)
   at Module._compile (internal/modules/cjs/loader.js:702:30)
   at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
   at Module.load (internal/modules/cjs/loader.js:612:32)at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
   at Function.Module._load (internal/modules/cjs/loader.js:543:3)

示例

在下面的示例中,我们创建一个函数,并在函数内部调用带有错误消息的 `TypeError`。我们还将文本传递给 `message` 参数。

const assert = require('assert');
function func(){
   throw new TypeError('Error...');
}
assert.doesNotThrow( () => { func() }, /Error.../, 'This is a text from MESSAGE parameter.');

输出

由于参数与 `TypeError` 中的错误消息相同,因此函数将抛出 `AssertionError` 并将 `message` 输出到结果。

assert.js:79
   throw new AssertionError(obj);
   ^AssertionError [ERR_ASSERTION]: Got unwanted exception: This is a text from MESSAGE parameter.
   
Actual message: "Error..."
   at Object.<anonymous> (/home/cg/root/639c2bf348ea8/main.js:7:8)
   at Module._compile (internal/modules/cjs/loader.js:702:30)
   at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
   at Module.load (internal/modules/cjs/loader.js:612:32)
   at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
   at Function.Module._load (internal/modules/cjs/loader.js:543:3)
   at Function.Module.runMain (internal/modules/cjs/loader.js:744:10)
   at startup (internal/bootstrap/node.js:238:19)
   at bootstrapNodeJSCore (internal/bootstrap/node.js:572:3)
nodejs_assert_module.htm
广告