From ba927004c527708591d8a38eadbbd3c8bb126661 Mon Sep 17 00:00:00 2001 From: Tim Yung Date: Mon, 24 Apr 2023 15:01:51 -0700 Subject: [PATCH] RN: Cleanup `NativeExceptionsManager` Mock (#37074) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/37074 I am exploring ways of cleaning up the React Native Jest `setup.js` logic so that we can enable Flow and make it easier to maintain. This does a few things: - Create a new Jest test to verify that mocking works as expected (i.e. `jest.mock(X)` and `import ... from 'X'` does the right thing). - Move the mock implementation for `NativeExceptionsManager` into a `__mocks__` directory that Jest can find automatically. - Add `flow strict` and fill out the missing implementation details of the `NativeExceptionsManager` mock. Changelog: [General][Added] - Added missing methods to `NativeExceptionsManager` mock in Jest Reviewed By: fkgozali Differential Revision: D45244175 fbshipit-source-id: 0f4c8f873f93304509b80a13ed52e96265d10a42 --- .../Core/__mocks__/NativeExceptionsManager.js | 20 +++++++++++++++++++ .../react-native/jest/__tests__/setup-test.js | 18 +++++++++++++++++ packages/react-native/jest/setup.js | 7 +------ 3 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 packages/react-native/Libraries/Core/__mocks__/NativeExceptionsManager.js create mode 100644 packages/react-native/jest/__tests__/setup-test.js diff --git a/packages/react-native/Libraries/Core/__mocks__/NativeExceptionsManager.js b/packages/react-native/Libraries/Core/__mocks__/NativeExceptionsManager.js new file mode 100644 index 00000000000..a43017ce012 --- /dev/null +++ b/packages/react-native/Libraries/Core/__mocks__/NativeExceptionsManager.js @@ -0,0 +1,20 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict + * @format + * @oncall react_native + */ + +import typeof NativeExceptionsManager from '../NativeExceptionsManager'; + +export default ({ + reportFatalException: jest.fn(), + reportSoftException: jest.fn(), + updateExceptionMessage: jest.fn(), + dismissRedbox: jest.fn(), + reportException: jest.fn(), +}: NativeExceptionsManager); diff --git a/packages/react-native/jest/__tests__/setup-test.js b/packages/react-native/jest/__tests__/setup-test.js new file mode 100644 index 00000000000..cc06b3dcf6d --- /dev/null +++ b/packages/react-native/jest/__tests__/setup-test.js @@ -0,0 +1,18 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict + * @format + * @oncall react_native + */ + +import NativeExceptionsManager from '../../Libraries/Core/NativeExceptionsManager'; + +test('NativeExceptionsManager is a mock', () => { + expect(jest.isMockFunction(NativeExceptionsManager.reportException)).toBe( + true, + ); +}); diff --git a/packages/react-native/jest/setup.js b/packages/react-native/jest/setup.js index 3865229af71..c542ef38f8b 100644 --- a/packages/react-native/jest/setup.js +++ b/packages/react-native/jest/setup.js @@ -58,12 +58,7 @@ Object.defineProperties(global, { jest .mock('../Libraries/Core/InitializeCore', () => {}) - .mock('../Libraries/Core/NativeExceptionsManager', () => ({ - __esModule: true, - default: { - reportException: jest.fn(), - }, - })) + .mock('../Libraries/Core/NativeExceptionsManager') .mock('../Libraries/ReactNative/UIManager', () => ({ AndroidViewPager: { Commands: {