From 507b05f4c02b46109f483a2b79c924a775fd7bd3 Mon Sep 17 00:00:00 2001 From: AntoineDoubovetzky Date: Wed, 26 Jan 2022 23:50:20 -0800 Subject: [PATCH] fix(jest/setup): fix circular dependencies in mockModal (#32964) Summary: Fixes https://github.com/facebook/react-native/issues/32939 It appears there is circular dependencies on the Modal component that causes the modalMock function to be an empty object. Removing the import fixes the issue. I don't know yet why this is not happening when executing the test suite inside `Modal-test.js` but I will investigate this later. ## Changelog [General] [Fixed] - Fix error "mockModal is not a function" Pull Request resolved: https://github.com/facebook/react-native/pull/32964 Test Plan: On a newly initiated project using react-native 0.67.1 I created a ModalComponent: ``` import React from 'react'; import {Modal, Text} from 'react-native'; export const ModalComponent = () => { return ( Test ); }; ``` and a ModalComponent.test.tsx: ``` import 'react-native'; import React from 'react'; import {ModalComponent} from '../ModalComponent'; // Note: test renderer must be required after react-native. import renderer from 'react-test-renderer'; it('renders correctly', () => { renderer.create(); }); ``` Running the test throws the error "TypeError: mockModal is not a function". After modifying the mockModal inside node_modules/react-native/jest/mockModal.js it works correctly. Reviewed By: christophpurrer Differential Revision: D33771136 Pulled By: lunaleaps fbshipit-source-id: c09ada8d2f864f5568b3379616a6cace9fb9921e --- jest/mockModal.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jest/mockModal.js b/jest/mockModal.js index 4f604454513f4a..e38944d52dc599 100644 --- a/jest/mockModal.js +++ b/jest/mockModal.js @@ -13,11 +13,11 @@ 'use strict'; const React = require('react'); -const Modal = require('../Libraries/Modal/Modal'); +import typeof Modal from '../Libraries/Modal/Modal'; function mockModal(BaseComponent: $FlowFixMe) { class ModalMock extends BaseComponent { - render(): React.Element { + render(): React.Element { return ( {this.props.visible !== true ? null : this.props.children}