diff --git a/CHANGELOG.md b/CHANGELOG.md index 7be38c0984c0..a743b652ca1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,6 +77,7 @@ - `[jest-mock]` Fix function overloads for `spyOn` to allow more correct type inference in complex object ([#12442](https://github.com/facebook/jest/pull/12442)) - `[jest-reporters]` Notifications generated by the `--notify` flag are no longer persistent in GNOME Shell. ([#11733](https://github.com/facebook/jest/pull/11733)) - `[@jest/reporters]` Move missing icon file which is needed for `NotifyReporter` class. ([#12593](https://github.com/facebook/jest/pull/12593)) +- `[jest-resolver]` Call custom resolver with core node.js modules ([#12654](https://github.com/facebook/jest/pull/12654)) - `[jest-worker]` Fix `Farm` execution results memory leak ([#12497](https://github.com/facebook/jest/pull/12497)) ### Chore & Maintenance diff --git a/e2e/__tests__/__snapshots__/moduleNameMapper.test.ts.snap b/e2e/__tests__/__snapshots__/moduleNameMapper.test.ts.snap index b9c10e68936f..912914fe7348 100644 --- a/e2e/__tests__/__snapshots__/moduleNameMapper.test.ts.snap +++ b/e2e/__tests__/__snapshots__/moduleNameMapper.test.ts.snap @@ -41,7 +41,7 @@ exports[`moduleNameMapper wrong array configuration 1`] = ` 12 | module.exports = () => 'test'; 13 | - at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:899:17) + at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:901:17) at Object.require (index.js:10:1)" `; @@ -70,6 +70,6 @@ exports[`moduleNameMapper wrong configuration 1`] = ` 12 | module.exports = () => 'test'; 13 | - at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:899:17) + at createNoMappedModuleFoundError (../../packages/jest-resolve/build/resolver.js:901:17) at Object.require (index.js:10:1)" `; diff --git a/e2e/__tests__/__snapshots__/resolveNoFileExtensions.test.ts.snap b/e2e/__tests__/__snapshots__/resolveNoFileExtensions.test.ts.snap index 8ee95a4ed134..a457d7551b13 100644 --- a/e2e/__tests__/__snapshots__/resolveNoFileExtensions.test.ts.snap +++ b/e2e/__tests__/__snapshots__/resolveNoFileExtensions.test.ts.snap @@ -37,6 +37,6 @@ exports[`show error message with matching files 1`] = ` | ^ 9 | - at Resolver._throwModNotFoundError (../../packages/jest-resolve/build/resolver.js:491:11) + at Resolver._throwModNotFoundError (../../packages/jest-resolve/build/resolver.js:493:11) at Object.require (index.js:8:18)" `; diff --git a/packages/jest-resolve/src/__tests__/resolve.test.ts b/packages/jest-resolve/src/__tests__/resolve.test.ts index 34a286c57209..aa5d40bbcc54 100644 --- a/packages/jest-resolve/src/__tests__/resolve.test.ts +++ b/packages/jest-resolve/src/__tests__/resolve.test.ts @@ -399,6 +399,21 @@ describe('resolveModule', () => { expect(resolvedWithSlash).toBe(fooSlashIndex); expect(resolvedWithSlash).toBe(resolvedWithDot); }); + + it('custom resolver can resolve node modules', () => { + userResolver.mockImplementation(() => 'module'); + + const moduleMap = ModuleMap.create('/'); + const resolver = new Resolver(moduleMap, { + extensions: ['.js'], + resolver: require.resolve('../__mocks__/userResolver'), + } as ResolverConfig); + const src = require.resolve('../'); + resolver.resolveModule(src, 'fs'); + + expect(userResolver).toHaveBeenCalled(); + expect(userResolver.mock.calls[0][0]).toBe('fs'); + }); }); describe('resolveModuleAsync', () => { diff --git a/packages/jest-resolve/src/resolver.ts b/packages/jest-resolve/src/resolver.ts index bf3c8e7cdc23..1ac833d5bf55 100644 --- a/packages/jest-resolve/src/resolver.ts +++ b/packages/jest-resolve/src/resolver.ts @@ -218,7 +218,8 @@ export default class Resolver { // dependency graph because we don't have to look at modules that may not // exist and aren't mocked. const resolveNodeModule = (name: string, throwIfNotFound = false) => { - if (this.isCoreModule(name)) { + // Only skip default resolver + if (this.isCoreModule(name) && !this._options.resolver) { return name; } @@ -292,7 +293,8 @@ export default class Resolver { // dependency graph because we don't have to look at modules that may not // exist and aren't mocked. const resolveNodeModule = async (name: string, throwIfNotFound = false) => { - if (this.isCoreModule(name)) { + // Only skip default resolver + if (this.isCoreModule(name) && !this._options.resolver) { return name; }