• 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
廣告
© . All rights reserved.