The MockTracker class is used to manage mocking functionality. The test runner module provides a top level mock export which is a MockTracker instance. Each test also provides its own MockTracker instance via the test context's mock property.
interface
test.default.MockTracker
interface MockTracker
- original?: F,
This function is used to create a mock function.
The following example creates a mock function that increments a counter by one on each invocation. The
timesoption is used to modify the mock behavior such that the first two invocations add two to the counter instead of one.test('mocks a counting function', (t) => { let cnt = 0; function addOne() { cnt++; return cnt; } function addTwo() { cnt += 2; return cnt; } const fn = t.mock.fn(addOne, addTwo, { times: 2 }); assert.strictEqual(fn(), 2); assert.strictEqual(fn(), 4); assert.strictEqual(fn(), 5); assert.strictEqual(fn(), 6); });@param originalAn optional function to create a mock on.
@param optionsOptional configuration options for the mock function.
@returnsThe mocked function. The mocked function contains a special
mockproperty, which is an instance of MockFunctionContext, and can be used for inspecting and changing the behavior of the mocked function.original?: F,implementation?: Implementation, - object: MockedObject,methodName: MethodName,
This function is syntax sugar for
MockTracker.methodwithoptions.getterset totrue.getter<MockedObject extends object, MethodName extends string | number | symbol, Implementation extends Function>(object: MockedObject,methodName: MethodName,implementation?: Implementation, - object: MockedObject,methodName: MethodName,
This function is used to create a mock on an existing object method. The following example demonstrates how a mock is created on an existing object method.
test('spies on an object method', (t) => { const number = { value: 5, subtract(a) { return this.value - a; }, }; t.mock.method(number, 'subtract'); assert.strictEqual(number.subtract.mock.calls.length, 0); assert.strictEqual(number.subtract(3), 2); assert.strictEqual(number.subtract.mock.calls.length, 1); const call = number.subtract.mock.calls[0]; assert.deepStrictEqual(call.arguments, [3]); assert.strictEqual(call.result, 2); assert.strictEqual(call.error, undefined); assert.strictEqual(call.target, undefined); assert.strictEqual(call.this, number); });@param objectThe object whose method is being mocked.
@param methodNameThe identifier of the method on
objectto mock. Ifobject[methodName]is not a function, an error is thrown.@param optionsOptional configuration options for the mock method.
@returnsThe mocked method. The mocked method contains a special
mockproperty, which is an instance of MockFunctionContext, and can be used for inspecting and changing the behavior of the mocked method.method<MockedObject extends object, MethodName extends string | number | symbol, Implementation extends Function>(object: MockedObject,methodName: MethodName,implementation: Implementation,object: MockedObject,methodName: keyof MockedObject,object: MockedObject,methodName: keyof MockedObject,implementation: Function, - specifier: string,
This function is used to mock the exports of ECMAScript modules, CommonJS modules, JSON modules, and Node.js builtin modules. Any references to the original module prior to mocking are not impacted. In order to enable module mocking, Node.js must be started with the
--experimental-test-module-mockscommand-line flag.The following example demonstrates how a mock is created for a module.
test('mocks a builtin module in both module systems', async (t) => { // Create a mock of 'node:readline' with a named export named 'fn', which // does not exist in the original 'node:readline' module. const mock = t.mock.module('node:readline', { namedExports: { fn() { return 42; } }, }); let esmImpl = await import('node:readline'); let cjsImpl = require('node:readline'); // cursorTo() is an export of the original 'node:readline' module. assert.strictEqual(esmImpl.cursorTo, undefined); assert.strictEqual(cjsImpl.cursorTo, undefined); assert.strictEqual(esmImpl.fn(), 42); assert.strictEqual(cjsImpl.fn(), 42); mock.restore(); // The mock is restored, so the original builtin module is returned. esmImpl = await import('node:readline'); cjsImpl = require('node:readline'); assert.strictEqual(typeof esmImpl.cursorTo, 'function'); assert.strictEqual(typeof cjsImpl.cursorTo, 'function'); assert.strictEqual(esmImpl.fn, undefined); assert.strictEqual(cjsImpl.fn, undefined); });@param specifierA string identifying the module to mock.
@param optionsOptional configuration options for the mock module.
- object: MockedObject,property: PropertyName,value?: MockedObject[PropertyName]
Creates a mock for a property value on an object. This allows you to track and control access to a specific property, including how many times it is read (getter) or written (setter), and to restore the original value after mocking.
test('mocks a property value', (t) => { const obj = { foo: 42 }; const prop = t.mock.property(obj, 'foo', 100); assert.strictEqual(obj.foo, 100); assert.strictEqual(prop.mock.accessCount(), 1); assert.strictEqual(prop.mock.accesses[0].type, 'get'); assert.strictEqual(prop.mock.accesses[0].value, 100); obj.foo = 200; assert.strictEqual(prop.mock.accessCount(), 2); assert.strictEqual(prop.mock.accesses[1].type, 'set'); assert.strictEqual(prop.mock.accesses[1].value, 200); prop.mock.restore(); assert.strictEqual(obj.foo, 42); });@param objectThe object whose value is being mocked.
@param valueAn optional value used as the mock value for
object[propertyName]. Default: The original property value.@returnsA proxy to the mocked object. The mocked object contains a special
mockproperty, which is an instance of [MockPropertyContext][], and can be used for inspecting and changing the behavior of the mocked property. This function restores the default behavior of all mocks that were previously created by this
MockTrackerand disassociates the mocks from theMockTrackerinstance. Once disassociated, the mocks can still be used, but theMockTrackerinstance can no longer be used to reset their behavior or otherwise interact with them.After each test completes, this function is called on the test context's
MockTracker. If the globalMockTrackeris used extensively, calling this function manually is recommended.This function restores the default behavior of all mocks that were previously created by this
MockTracker. Unlikemock.reset(),mock.restoreAll()does not disassociate the mocks from theMockTrackerinstance.- object: MockedObject,methodName: MethodName,
This function is syntax sugar for
MockTracker.methodwithoptions.setterset totrue.setter<MockedObject extends object, MethodName extends string | number | symbol, Implementation extends Function>(object: MockedObject,methodName: MethodName,implementation?: Implementation,