Jest's Mock functionality is an important tool for isolating dependencies and verifying behavior in tests:
1. Creating Mock Functions:
javascriptconst mockFn = jest.fn(); mockFn('arg1', 'arg2'); expect(mockFn).toHaveBeenCalledWith('arg1', 'arg2'); expect(mockFn).toHaveBeenCalledTimes(1);
2. Mock Return Values:
javascriptconst mockFn = jest.fn(); mockFn.mockReturnValue(42); mockFn.mockReturnValueOnce(10).mockReturnValueOnce(20); // Or use mockResolvedValue for Promises mockFn.mockResolvedValue('data');
3. Mock Implementation:
javascriptconst mockFn = jest.fn((a, b) => a + b); // Or use mockImplementation mockFn.mockImplementation((a, b) => a * b);
4. Mock Modules:
javascriptjest.mock('./api', () => ({ fetchData: jest.fn(() => Promise.resolve('data')) })); import { fetchData } from './api';
5. Spy Functions:
javascriptconst spy = jest.spyOn(object, 'method'); spy.mockRestore(); // Restore original function
Common Assertions:
toHaveBeenCalled(): Was calledtoHaveBeenCalledWith(...args): Called with specific argumentstoHaveBeenCalledTimes(n): Number of callstoHaveReturnedWith(value): Returned specific valuetoHaveLastReturnedWith(value): Last returned value
Best Practices:
- Mock external dependencies, not the code being tested
- Clean up mocks after testing
- Use
jest.clearAllMocks()to clear call records - Use
jest.restoreAllMocks()to restore original implementations