From 3b64ed00977dfd3e0ecdccfd86790f6b3c1eaf18 Mon Sep 17 00:00:00 2001 From: Kudo Chien Date: Thu, 21 Nov 2024 07:46:14 -0800 Subject: [PATCH] Fix lazy import error from jest and Appearance.js (#47629) Summary: currently running jest test, it shows an error: ``` ReferenceError: You are trying to `import` a file after the Jest environment has been torn down. From __tests__/App.test.tsx. at getState (node_modules/react-native/Libraries/Utilities/Appearance.js:18:26) at addChangeListener (node_modules/react-native/Libraries/Utilities/Appearance.js:71:19) at subscribe (node_modules/react-native/Libraries/Utilities/useColorScheme.js:10:66) at subscribeToStore (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:6232:10) at commitHookEffectListMount (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:13038:26) at commitPassiveMountOnFiber (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14461:11) at commitPassiveMountEffects_complete (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14421:9) at commitPassiveMountEffects_begin (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14408:7) at commitPassiveMountEffects (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14396:3) at flushPassiveEffectsImpl (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16287:3) at flushPassiveEffects (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16236:14) at node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16051:9 at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34) at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14) at Immediate.performWorkUntilDeadline [as _onImmediate] (node_modules/scheduler/cjs/scheduler.development.js:533:21) ``` it is a regression from https://github.com/facebook/react-native/issues/46123 that to have a lazy require. this pr tries to mock `useColorScheme` to return `light`. i think we don't necessarily test the color scheme changes in jest runtime. originally `useColorScheme` also returns `light` because of [this statement](https://github.com/facebook/react-native/blob/9a60038a40e16925ea1adeb3e3c937c22a615485/packages/react-native/Libraries/Utilities/Appearance.js#L77-L83) ## Changelog: [GENERAL] [FIXED] - Fixed jest error from Appearance.js Pull Request resolved: https://github.com/facebook/react-native/pull/47629 Test Plan: ```sh $ npx react-native-community/cli init RN0762 --pm bun --version 0.76.2 $ cd RN0762 $ bun test run ``` Reviewed By: cipolleschi Differential Revision: D66297456 Pulled By: huntie fbshipit-source-id: 80d1460532e76bd1815c66964547b50d7f7b3558 --- packages/react-native/jest/setup.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/react-native/jest/setup.js b/packages/react-native/jest/setup.js index dcabe3c8d9a..f3eb72928d2 100644 --- a/packages/react-native/jest/setup.js +++ b/packages/react-native/jest/setup.js @@ -417,4 +417,8 @@ jest return jest.requireActual( '../Libraries/ReactNative/RendererImplementation', ); - }); + }) + .mock('../Libraries/Utilities/useColorScheme', () => ({ + __esModule: true, + default: jest.fn().mockReturnValue('light'), + }));