From 7bf052d654eac20840ef25828821890d66994240 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 4 Sep 2019 20:50:18 +0200 Subject: [PATCH] fix(jest-resolve): don't confuse directories with files --- CHANGELOG.md | 1 + packages/jest-resolve/src/__mocks__/foo.js | 0 packages/jest-resolve/src/__mocks__/foo/foo.js | 8 ++++++++ .../jest-resolve/src/__mocks__/foo/index.js | 0 .../jest-resolve/src/__mocks__/userResolver.js | 1 - .../jest-resolve/src/__tests__/resolve.test.ts | 18 +++++++++++++++--- packages/jest-resolve/src/defaultResolver.ts | 2 +- 7 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 packages/jest-resolve/src/__mocks__/foo.js create mode 100644 packages/jest-resolve/src/__mocks__/foo/foo.js create mode 100644 packages/jest-resolve/src/__mocks__/foo/index.js diff --git a/CHANGELOG.md b/CHANGELOG.md index fc78d401485a..c340be51def8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ - `[jest-fake-timers]` `getTimerCount` will not include cancelled immediates ([#8764](https://github.com/facebook/jest/pull/8764)) - `[jest-leak-detector]` [**BREAKING**] Use `weak-napi` instead of `weak` package ([#8686](https://github.com/facebook/jest/pull/8686)) - `[jest-mock]` Fix for mockReturnValue overriding mockImplementationOnce ([#8398](https://github.com/facebook/jest/pull/8398)) +- `[jest-resolve]` Do not confuse directories with files ([#8912](https://github.com/facebook/jest/pull/8912)) - `[jest-snapshot]` Remove only the added newlines in multiline snapshots ([#8859](https://github.com/facebook/jest/pull/8859)) - `[jest-snapshot]` Distinguish empty string from external snapshot not written ([#8880](https://github.com/facebook/jest/pull/8880)) - `[jest-snapshot]` [**BREAKING**] Distinguish empty string from internal snapshot not written ([#8898](https://github.com/facebook/jest/pull/8898)) diff --git a/packages/jest-resolve/src/__mocks__/foo.js b/packages/jest-resolve/src/__mocks__/foo.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/jest-resolve/src/__mocks__/foo/foo.js b/packages/jest-resolve/src/__mocks__/foo/foo.js new file mode 100644 index 000000000000..77aec8db294a --- /dev/null +++ b/packages/jest-resolve/src/__mocks__/foo/foo.js @@ -0,0 +1,8 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +module.exports = require.resolve('./'); diff --git a/packages/jest-resolve/src/__mocks__/foo/index.js b/packages/jest-resolve/src/__mocks__/foo/index.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/jest-resolve/src/__mocks__/userResolver.js b/packages/jest-resolve/src/__mocks__/userResolver.js index 9b702a30ffe4..3b8e4c10f327 100644 --- a/packages/jest-resolve/src/__mocks__/userResolver.js +++ b/packages/jest-resolve/src/__mocks__/userResolver.js @@ -3,7 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * */ 'use strict'; diff --git a/packages/jest-resolve/src/__tests__/resolve.test.ts b/packages/jest-resolve/src/__tests__/resolve.test.ts index c136ba0e5c6d..35893cf512ab 100644 --- a/packages/jest-resolve/src/__tests__/resolve.test.ts +++ b/packages/jest-resolve/src/__tests__/resolve.test.ts @@ -9,7 +9,7 @@ import * as fs from 'fs'; import * as path from 'path'; import {ModuleMap} from 'jest-haste-map'; -import Resolver from '../'; +import Resolver = require('../'); // @ts-ignore: js file import userResolver from '../__mocks__/userResolver'; import nodeModulesPaths from '../nodeModulesPaths'; @@ -83,7 +83,7 @@ describe('findNodeModule', () => { }); describe('resolveModule', () => { - let moduleMap: typeof ModuleMap; + let moduleMap: ModuleMap; beforeEach(() => { moduleMap = ModuleMap.create('/'); }); @@ -156,6 +156,18 @@ describe('resolveModule', () => { }); expect(resolved).toBe(require.resolve('../__mocks__/mockJsDependency.js')); }); + + it('does not confuse directories with files', () => { + const resolver = new Resolver(moduleMap, { + extensions: ['.js'], + } as ResolverConfig); + const mocksDirectory = path.resolve(__dirname, '../__mocks__'); + const resolved = resolver.resolveModule( + path.join(mocksDirectory, 'foo/foo.js'), + './', + ); + expect(resolved).toBe(path.join(mocksDirectory, 'foo/index.js')); + }); }); describe('getMockModule', () => { @@ -195,7 +207,7 @@ describe('nodeModulesPaths', () => { describe('Resolver.getModulePaths() -> nodeModulesPaths()', () => { const _path = path; - let moduleMap: typeof ModuleMap; + let moduleMap: ModuleMap; beforeEach(() => { jest.resetModules(); diff --git a/packages/jest-resolve/src/defaultResolver.ts b/packages/jest-resolve/src/defaultResolver.ts index 44f66d6e8ee6..131234b8ca10 100644 --- a/packages/jest-resolve/src/defaultResolver.ts +++ b/packages/jest-resolve/src/defaultResolver.ts @@ -97,7 +97,7 @@ function resolveSync( const dir = path.dirname(name); let result; if (isDirectory(dir)) { - result = resolveAsFile(name) || resolveAsDirectory(name); + result = resolveAsDirectory(name) || resolveAsFile(name); } if (result) { // Dereference symlinks to ensure we don't create a separate