MockFunctionContext
History
The MockFunctionContext class is used to inspect or manipulate the behavior of
mocks created via the MockTracker APIs.
ArrayA getter that returns a copy of the internal array used to track calls to the mock. Each entry in the array is an object with the following properties.
Arrayanyundefined.anyErrorError object whose stack can be used to determine the
callsite of the mocked function invocation.undefined.anythis value.ctx.callCount(): integer
integerThis function returns the number of times that this mock has been invoked. This
function is more efficient than checking ctx.calls.length because ctx.calls
is a getter that creates a copy of the internal call tracking array.
ctx.mockImplementation(implementation): void
Function | AsyncFunctionThis function is used to change the behavior of an existing mock.
The following example creates a mock function using t.mock.fn(), calls the
mock function, and then changes the mock implementation to a different function.
test('changes a mock behavior', (t) => { let cnt = 0; function addOne() { cnt++; return cnt; } function addTwo() { cnt += 2; return cnt; } const fn = t.mock.fn(addOne); assert.strictEqual(fn(), 1); fn.mock.mockImplementation(addTwo); assert.strictEqual(fn(), 3); assert.strictEqual(fn(), 5); });
ctx.mockImplementationOnce(implementation, onCall?): void
Function | AsyncFunctiononCall.integerimplementation. If
the specified invocation has already occurred then an exception is thrown.
Default: The number of the next invocation.This function is used to change the behavior of an existing mock for a single
invocation. Once invocation onCall has occurred, the mock will revert to
whatever behavior it would have used had mockImplementationOnce() not been
called.
The following example creates a mock function using t.mock.fn(), calls the
mock function, changes the mock implementation to a different function for the
next invocation, and then resumes its previous behavior.
test('changes a mock behavior once', (t) => { let cnt = 0; function addOne() { cnt++; return cnt; } function addTwo() { cnt += 2; return cnt; } const fn = t.mock.fn(addOne); assert.strictEqual(fn(), 1); fn.mock.mockImplementationOnce(addTwo); assert.strictEqual(fn(), 3); assert.strictEqual(fn(), 4); });
ctx.resetCalls(): void
Resets the call history of the mock function.
ctx.restore(): void
Resets the implementation of the mock function to its original behavior. The mock can still be used after calling this function.