Skip to content

Commit 62b4bd7

Browse files
fix: call custom resolver with node.js modules (#12654)
1 parent 09fa164 commit 62b4bd7

File tree

5 files changed

+23
-5
lines changed

5 files changed

+23
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
- `[jest-mock]` Fix function overloads for `spyOn` to allow more correct type inference in complex object ([#12442](https://github.com/facebook/jest/pull/12442))
7878
- `[jest-reporters]` Notifications generated by the `--notify` flag are no longer persistent in GNOME Shell. ([#11733](https://github.com/facebook/jest/pull/11733))
7979
- `[@jest/reporters]` Move missing icon file which is needed for `NotifyReporter` class. ([#12593](https://github.com/facebook/jest/pull/12593))
80+
- `[jest-resolver]` Call custom resolver with core node.js modules ([#12654](https://github.com/facebook/jest/pull/12654))
8081
- `[jest-worker]` Fix `Farm` execution results memory leak ([#12497](https://github.com/facebook/jest/pull/12497))
8182

8283
### Chore & Maintenance

e2e/__tests__/__snapshots__/moduleNameMapper.test.ts.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ exports[`moduleNameMapper wrong array configuration 1`] = `
4141
12 | module.exports = () => 'test';
4242
13 |
4343
44-
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:899:17)
44+
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:901:17)
4545
at Object.require (index.js:10:1)"
4646
`;
4747

@@ -70,6 +70,6 @@ exports[`moduleNameMapper wrong configuration 1`] = `
7070
12 | module.exports = () => 'test';
7171
13 |
7272
73-
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:899:17)
73+
at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:901:17)
7474
at Object.require (index.js:10:1)"
7575
`;

e2e/__tests__/__snapshots__/resolveNoFileExtensions.test.ts.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,6 @@ exports[`show error message with matching files 1`] = `
3737
| ^
3838
9 |
3939
40-
at Resolver._throwModNotFoundError (../../packages/jest-resolve/build/resolver.js:491:11)
40+
at Resolver._throwModNotFoundError (../../packages/jest-resolve/build/resolver.js:493:11)
4141
at Object.require (index.js:8:18)"
4242
`;

packages/jest-resolve/src/__tests__/resolve.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,21 @@ describe('resolveModule', () => {
399399
expect(resolvedWithSlash).toBe(fooSlashIndex);
400400
expect(resolvedWithSlash).toBe(resolvedWithDot);
401401
});
402+
403+
it('custom resolver can resolve node modules', () => {
404+
userResolver.mockImplementation(() => 'module');
405+
406+
const moduleMap = ModuleMap.create('/');
407+
const resolver = new Resolver(moduleMap, {
408+
extensions: ['.js'],
409+
resolver: require.resolve('../__mocks__/userResolver'),
410+
} as ResolverConfig);
411+
const src = require.resolve('../');
412+
resolver.resolveModule(src, 'fs');
413+
414+
expect(userResolver).toHaveBeenCalled();
415+
expect(userResolver.mock.calls[0][0]).toBe('fs');
416+
});
402417
});
403418

404419
describe('resolveModuleAsync', () => {

packages/jest-resolve/src/resolver.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,8 @@ export default class Resolver {
218218
// dependency graph because we don't have to look at modules that may not
219219
// exist and aren't mocked.
220220
const resolveNodeModule = (name: string, throwIfNotFound = false) => {
221-
if (this.isCoreModule(name)) {
221+
// Only skip default resolver
222+
if (this.isCoreModule(name) && !this._options.resolver) {
222223
return name;
223224
}
224225

@@ -292,7 +293,8 @@ export default class Resolver {
292293
// dependency graph because we don't have to look at modules that may not
293294
// exist and aren't mocked.
294295
const resolveNodeModule = async (name: string, throwIfNotFound = false) => {
295-
if (this.isCoreModule(name)) {
296+
// Only skip default resolver
297+
if (this.isCoreModule(name) && !this._options.resolver) {
296298
return name;
297299
}
298300

0 commit comments

Comments
 (0)