From 991e83f568f7abc28b25da569fb7a4682753fe8b Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Mon, 14 Jan 2019 16:28:55 -0800 Subject: [PATCH] fix: use `require.resolve` in `jest-preset` (#22972) Summary: The current way the Jest preset work requires the different files to be in `/node_modules/react-native`. This is not necessarily true - especially in monorepoes. If we instead do `require.resolve`, we do not need to do `rootDir` replacement in Jest. Having a JS file as preset has been supported since Jest 23.0.0: https://github.com/facebook/jest/pull/6185 Changelog: ---------- [General] [Fixed] - use `require.resolve` in `jest-preset` Pull Request resolved: https://github.com/facebook/react-native/pull/22972 Differential Revision: D13662758 Pulled By: hramos fbshipit-source-id: ca79b5b89d9d05c6fe639b0d88619858e8d05da7 --- jest-preset.js | 41 +++++++++++++++++++++++++++++++++++++++++ jest-preset.json | 39 --------------------------------------- package.json | 2 +- 3 files changed, 42 insertions(+), 40 deletions(-) create mode 100644 jest-preset.js delete mode 100644 jest-preset.json diff --git a/jest-preset.js b/jest-preset.js new file mode 100644 index 00000000000000..249ec2d7b6dbe6 --- /dev/null +++ b/jest-preset.js @@ -0,0 +1,41 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +'use strict'; + +const dir = __dirname; + +module.exports = { + haste: { + defaultPlatform: 'ios', + platforms: ['android', 'ios', 'native'], + hasteImplModulePath: require.resolve('./jest/hasteImpl.js'), + providesModuleNodeModules: ['react-native'], + }, + moduleFileExtensions: ['js', 'json', 'jsx', 'node', 'ts', 'tsx'], + moduleNameMapper: { + '^React$': require.resolve('react'), + }, + modulePathIgnorePatterns: [`${dir}/Libraries/react-native/`], + transform: { + '^.+\\.(js|ts|tsx)$': 'babel-jest', + '^.+\\.(bmp|gif|jpg|jpeg|mp4|png|psd|svg|webp)$': require.resolve( + './jest/assetFileTransformer.js', + ), + }, + transformIgnorePatterns: [ + 'node_modules/(?!(jest-)?react-native|react-clone-referenced-element)', + ], + testMatch: [ + '**/__tests__/**/*.(js|ts|tsx)', + '**/?(*.)+(spec|test).(js|ts|tsx)', + ], + setupFiles: [require.resolve('./jest/setup.js')], + testEnvironment: 'node', +}; diff --git a/jest-preset.json b/jest-preset.json deleted file mode 100644 index d9c84f84becf6c..00000000000000 --- a/jest-preset.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "haste": { - "defaultPlatform": "ios", - "platforms": ["android", "ios", "native"], - "hasteImplModulePath": "/node_modules/react-native/jest/hasteImpl.js", - "providesModuleNodeModules": [ - "react-native" - ] - }, - "moduleFileExtensions": [ - "js", - "json", - "jsx", - "node", - "ts", - "tsx" - ], - "moduleNameMapper": { - "^React$": "/node_modules/react" - }, - "modulePathIgnorePatterns": [ - "/node_modules/react-native/Libraries/react-native/" - ], - "transform": { - "^.+\\.(js|ts|tsx)$": "babel-jest", - "^.+\\.(bmp|gif|jpg|jpeg|mp4|png|psd|svg|webp)$": "/node_modules/react-native/jest/assetFileTransformer.js" - }, - "transformIgnorePatterns": [ - "node_modules/(?!(jest-)?react-native|react-clone-referenced-element)" - ], - "testMatch": [ - "**/__tests__/**/*.(js|ts|tsx)", - "**/?(*.)+(spec|test).(js|ts|tsx)" - ], - "setupFiles": [ - "/node_modules/react-native/jest/setup.js" - ], - "testEnvironment": "node" -} diff --git a/package.json b/package.json index 502f47c354f3dd..54f38c6ee0fb1c 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "scripts/launchPackager.command", "scripts/packager.sh", "scripts/react-native-xcode.sh", - "jest-preset.json", + "jest-preset.js", "jest", "lib", "rn-get-polyfills.js",