jest.fn() tạo mock function độc lập, jest.mock() thay thế cả module, jest.spyOn() bọc method có sẵn và mặc định vẫn gọi implementation thật.
- jest.fn() — track calls/arguments/return values;
mockReturnValue(val)cho sync,mockResolvedValue/mockRejectedValuecho Promise,mockImplementation(fn)cho logic tùy biến. - jest.mock('path') — auto-mock toàn bộ module (mọi export thành
jest.fn()); truyền factoryjest.mock('./api', () => ({ fetchUser: jest.fn() }))để kiểm soát đầy đủ; lời gọi được hoisted lên đầu file. Mock một phần:jest.requireActual('module')giữ implementation thật cho phần còn lại. - jest.spyOn(obj, 'method') — mặc định vẫn gọi method thật và ghi lại arguments; override bằng
.mockImplementation(); phải restore sau test (mockRestore()hoặcjest.restoreAllMocks()). - Timer mocks —
jest.useFakeTimers()thay setTimeout/setInterval/Date;jest.runAllTimers(),jest.advanceTimersByTime(ms). - clear vs reset vs restore — clear (xóa lịch sử gọi), reset (clear + xóa implementation), restore (reset + trả spy về method gốc).