debugjestModerate
Mocking ES modules in Jest — cannot mock import statements
Viewed 0 times
jest.mockES moduleunstable_mockModuleimport mockdynamic importvitest
nodejs
Error Messages
Problem
jest.mock() does not work with ES module imports. The original module is still imported despite the mock.
Solution
jest.mock() must be at the top of the file — Jest hoists it automatically. For ESM: (1) Use jest.unstable_mockModule(). (2) Use dynamic import() after jest.mock(). (3) Prefer dependency injection over mocking. (4) Use __mocks__ directory. (5) For named exports: jest.mock('./module', () => ({ myFunc: jest.fn() })). With Vitest: vi.mock() handles ESM natively.
Why
ES module imports are hoisted and resolved before code runs. jest.mock() is hoisted by Babel/Jest transform, but native ESM modules are loaded by Node's module system which runs before transforms.
Revisions (0)
No revisions yet.