Online visitors

People learning around the world

Online

—

Active in the last 10 minutes

Online visitors by country Circles show approximate country locations. The country list provides the visitor counts.

Circles represent countries, not exact visitor locations.

Country

Online

Loading country activity…

    Node.js Test Runner Mocking

    Node.js Tutorials


    The built-in node:test module includes mocking tools for replacing functions and methods during tests. Mocks help isolate one unit of code from external services, slow operations, clocks, or behavior that is difficult to reproduce.

    Use Node.js 22 or later. Put the imports and the four tests below in one file named mocking.test.cjs. The .cjs extension keeps these examples in CommonJS mode.

    Import the Test API

    Example:

    const test = require('node:test');
    const assert = require('node:assert/strict');

    Mock a Function

    Example:

    test('formats a mocked result', t => {
      const loadName = t.mock.fn(() => 'Asha');
    
      assert.equal(loadName(), 'Asha');
      assert.equal(loadName.mock.callCount(), 1);
    });

    t.mock.fn() creates a mock function and records how it was called.

    Inspect Calls

    Example:

    test('tracks arguments', t => {
      const send = t.mock.fn();
    
      send('email', 42);
    
      const call = send.mock.calls[0];
    
      assert.equal(call.arguments[0], 'email');
      assert.equal(call.arguments[1], 42);
    });

    Call records are useful when the return value is not enough to prove correct behavior.

    Mock an Object Method

    Example:

    test('replaces a method', t => {
      const service = {
        status() {
          return 'online';
        }
      };
    
      t.mock.method(service, 'status', () => 'offline');
    
      assert.equal(service.status(), 'offline');
    });

    Method mocking is useful when the code under test receives an object dependency and calls one of its methods.

    Restore Test State

    Mocks created through the test context are designed to be cleaned up with the test lifecycle. Explicit restore APIs are also available when you need to return behavior earlier.

    Mock Timers

    The Node.js test runner can control selected timer behavior so a test does not have to wait for real time to pass.

    Example:

    test('timer-controlled code', t => {
      t.mock.timers.enable({ apis: ['setTimeout'] });
    
      let done = false;
    
      setTimeout(() => {
        done = true;
      }, 1000);
    
      t.mock.timers.tick(1000);
    
      assert.equal(done, true);
    });

    Timer mocking makes timeout, retry, and delayed-work tests faster and more deterministic.

    Tool Use
    mock.fn() Create a tracked function
    mock.method() Replace an object method
    mock.calls Inspect recorded calls
    mock.timers Control supported timer APIs

    Mock only the dependency boundary you need. Over-mocking can make a test pass while the real components no longer work together.

    Run the Tests

    Example:

    node --test mocking.test.cjs

    All four tests should pass. Test-runner formatting and duration fields vary by Node.js version; a timer-mocking experimental warning may also appear in older releases.

    Conclusion

    Node.js test runner mocks can replace functions, methods, and timers while recording how the mocked code was used. This makes unit tests faster and more focused without requiring an additional mocking framework for common cases.



    Found This Page Useful? Share It!
    Get the Latest Tutorials and Updates
    Join us on Telegram

    Notifications

    Updates are enabled for this browser.

    Receive new tutorials, articles and learning resources. You can turn updates off anytime.

    Test browser code

    Use this code in admin to send a test notification to this browser.