Skip to content

Commit e2ea999

Browse files
docs: add doc for unstable_unmockModule
Closes #15079
1 parent 49dee81 commit e2ea999

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

docs/ECMAScriptModules.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,54 @@ const {execSync} = await import('node:child_process');
6565
// etc.
6666
```
6767

68+
## Module unmocking in ESM
69+
70+
```js title="esm-module.mjs"
71+
export default () => {
72+
return 'default';
73+
};
74+
75+
export const namedFn = () => {
76+
return 'namedFn';
77+
};
78+
```
79+
80+
```js title="esm-module.test.mjs"
81+
import {jest, test} from '@jest/globals';
82+
83+
test('test esm-module', async () => {
84+
jest.unstable_mockModule('./esm-module.js', () => ({
85+
default: () => 'default implementation',
86+
namedFn: () => 'namedFn implementation',
87+
}));
88+
89+
const mockModule = await import('./esm-module.js');
90+
91+
console.log(mockModule.default()); // 'default implementation'
92+
console.log(mockModule.namedFn()); // 'namedFn implementation'
93+
94+
jest.unstable_unmockModule('./esm-module.js');
95+
96+
const originalModule = await import('./esm-module.js');
97+
98+
console.log(originalModule.default()); // 'default'
99+
console.log(originalModule.namedFn()); // 'namedFn'
100+
101+
/* !!! WARNING !!! Don`t override */
102+
jest.unstable_mockModule('./esm-module.js', () => ({
103+
default: () => 'default override implementation',
104+
namedFn: () => 'namedFn override implementation',
105+
}));
106+
107+
const mockModuleOverride = await import('./esm-module.js');
108+
109+
console.log(mockModuleOverride.default()); // 'default implementation'
110+
console.log(mockModuleOverride.namedFn()); // 'namedFn implementation'
111+
});
112+
```
113+
114+
## Mocking CJS modules
115+
68116
For mocking CJS modules, you should continue to use `jest.mock`. See the example below:
69117

70118
```js title="main.cjs"

0 commit comments

Comments
 (0)