• Node.js Video Tutorials

Node.js - assert.report() 函式



assert 模組提供了一組斷言函式,用於驗證不變數。tracker.report() 函式是 Node.js assert 模組的內建函式。

當我們想要了解關於函式預期呼叫次數和實際呼叫次數的資訊時,Node.js tracker.report() 函式非常有用,特別是當函式的呼叫次數與預期不符時。

此函式返回一個物件陣列,其中包含由 tracker.calls() 函式返回的包裝函式的所有資訊。

語法

以下是 Node.js tracker.report() 函式 的示例:

tracker.report();

引數

此函式不接受任何引數。

返回值

函式 tracker.report() 返回一個物件陣列,其中包含由 tracker.calls() 函式返回的包裝函式的資訊。

包含的資訊 物件 如下所述:

  • message<string> − 該訊息將由函式自動分配。

  • actual<number> − 顯示函式被實際呼叫的次數。

  • expected<number> − 顯示函式預期被呼叫的次數。

  • operator<operator> − 這將讓我們知道被包裝函式包裝的函式的名稱。

  • stack<Object> − 函式的堆疊跟蹤。

示例

在下面的示例中,

  • 我們建立了一個 呼叫跟蹤器 物件。

  • 然後我們建立了一個包裝函式。

  • 然後我們將函式 func 作為引數傳遞給 tracker.calls() 函式,我們將函式 func 包裝到包裝函式 funccall 中。

  • 然後我們呼叫 tracker.report() 函式。

const assert = require('assert');
const tracker = new assert.CallTracker();  
function func() {}; 
const callsfunc = tracker.calls(func, 5);
console.log(tracker.report());

輸出

/home/cg/root/63a002c52763b/main.js:1
(function (exports, require, module, __filename, __dirname) { aconst assert = require('assert');
   ^^^^^^
   
SyntaxError: Unexpected identifier
   at new Script (vm.js:74:7)
   at createScript (vm.js:246:10)
   at Object.runInThisContext (vm.js:298:10)
   at Module._compile (internal/modules/cjs/loader.js:670:28)
   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)

注意 − 有時線上編譯器可能無法提供預期的結果,因此我們會在本地執行上述程式碼。

當我們編譯並執行程式碼時,函式 tracker.report() 將在輸出中顯示一個物件陣列。

[
   {
      message: 'Expected the func function to be executed 5 time(s) but was executed 0 time(s).',
      actual: 0,
      expected: 5,
      operator: 'func',
      stack: Error
         at CallTracker.calls (node:internal/assert/calltracker:44:19)
         at Object.<anonymous> (C:\Users\Lenovo\Desktop\JavaScript\nodefile.js:7:27)
         at Module._compile (node:internal/modules/cjs/loader:1126:14)
         at Object.Module._extensions..js (node:internal/modules/cjs/loader:1180:10)
         at Module.load (node:internal/modules/cjs/loader:1004:32)
         at Function.Module._load (node:internal/modules/cjs/loader:839:12)
         at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
         at node:internal/main/run_main_module:17:47
   }
]

示例

在示例中,

  • 我們執行的操作與上述程式相同。

  • 但是在此程式碼中,我們呼叫了包裝函式 3 次,這與我們傳遞給 tracker.calls() 函式的 exact 引數不匹配。

const assert = require('assert');  
const tracker = new assert.CallTracker();  
function func() {};  
const callsfunc = tracker.calls(func, 5);
callsfunc();
callsfunc();
callsfunc();
console.log(tracker.report());

輸出

/home/cg/root/63a002c52763b/main.js:3
const tracker = new assert.CallTracker();
   ^
   
TypeError: assert.CallTracker is not a constructor
   at Object.<anonymous> (/home/cg/root/63a002c52763b/main.js:3:17)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)

注意 − 有時線上編譯器可能無法提供預期的結果,因此我們會在本地執行上述程式碼。

如果我們編譯並執行程式碼,tracker.reports() 函式將在輸出中顯示一個物件陣列。

[
   {
      message: 'Expected the func function to be executed 5 time(s) but was executed 3 time(s).',
      actual: 3,
      expected: 5,
      operator: 'func',
      stack: Error
         at CallTracker.calls (node:internal/assert/calltracker:44:19)
         at Object.<anonymous> (C:\Users\Lenovo\Desktop\JavaScript\nodefile.js:7:27)
         at Module._compile (node:internal/modules/cjs/loader:1126:14)
         at Object.Module._extensions..js (node:internal/modules/cjs/loader:1180:10)
         at Module.load (node:internal/modules/cjs/loader:1004:32)
         at Function.Module._load (node:internal/modules/cjs/loader:839:12)
         at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
         at node:internal/main/run_main_module:17:47
   }
]

示例

在下面的示例中,我們按預期呼叫包裝函式,次數與我們傳遞給 tracker.calls() 函式的 exact 引數相同。

const assert = require('assert');  
const tracker = new assert.CallTracker(); 
function func() {}; 
const callsfunc = tracker.calls(func, 5);
callsfunc();
callsfunc();
callsfunc();
callsfunc();
callsfunc();
console.log(tracker.report());

輸出

/home/cg/root/63a002c52763b/main.js:3
const tracker = new assert.CallTracker();
   ^
   
TypeError: assert.CallTracker is not a constructor
   at Object.<anonymous> (/home/cg/root/63a002c52763b/main.js:3:17)
   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)

注意 − 有時線上編譯器可能無法提供預期的結果,因此我們會在本地執行上述程式碼。

因此,如果我們編譯並執行程式碼,tracker.report() 函式將返回一個空的物件陣列。

[]
nodejs_assert_module.htm
廣告