@@ -65,6 +65,54 @@ const {execSync} = await import('node:child_process');
65
65
// etc.
66
66
```
67
67
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
+
68
116
For mocking CJS modules, you should continue to use ` jest.mock ` . See the example below:
69
117
70
118
``` js title="main.cjs"
0 commit comments