Skip to content

Commit 11254a0

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

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

docs/ECMAScriptModules.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,79 @@ 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+
You can override (that is new) implementation in the other test file
115+
116+
```js title="esm-module.test.mjs"
117+
import {jest, test} from '@jest/globals';
118+
119+
test('test esm-module new implementation', async () => {
120+
jest.unstable_mockModule('./esm-module.js', () => ({
121+
default: () => 'default new implementation',
122+
namedFn: () => 'namedFn new implementation',
123+
}));
124+
125+
const mockModule = await import('./esm-module.js');
126+
127+
console.log(mockModule.default()); // 'default new implementation'
128+
console.log(mockModule.namedFn()); // 'namedFn new implementation'
129+
130+
jest.unstable_unmockModule('./esm-module.js');
131+
132+
const originalModule = await import('./esm-module.js');
133+
134+
console.log(originalModule.default()); // 'default'
135+
console.log(originalModule.namedFn()); // 'namedFn'
136+
});
137+
```
138+
139+
## Mocking CJS modules
140+
68141
For mocking CJS modules, you should continue to use `jest.mock`. See the example below:
69142

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

0 commit comments

Comments
 (0)