diff --git a/packages/react-native/Libraries/Components/ScrollView/__tests__/ScrollView-test.js b/packages/react-native/Libraries/Components/ScrollView/__tests__/ScrollView-test.js index 6083f7c1547..1b9a1da8fdf 100644 --- a/packages/react-native/Libraries/Components/ScrollView/__tests__/ScrollView-test.js +++ b/packages/react-native/Libraries/Components/ScrollView/__tests__/ScrollView-test.js @@ -11,12 +11,12 @@ 'use strict'; +const {create, unmount, update} = require('../../../../jest/renderer'); const Text = require('../../../Text/Text'); const ReactNativeTestTools = require('../../../Utilities/ReactNativeTestTools'); const View = require('../../View/View'); const ScrollView = require('../ScrollView'); const React = require('react'); -const ReactTestRenderer = require('react-test-renderer'); describe('ScrollView', () => { beforeEach(() => { @@ -39,22 +39,22 @@ describe('ScrollView', () => { ); }); - it('mocks native methods and instance methods', () => { + it('mocks native methods and instance methods', async () => { jest.mock('../ScrollView'); const ref = React.createRef(); - ReactTestRenderer.create(); + await create(); expect(ref.current?.measure).toBeInstanceOf(jest.fn().constructor); expect(ref.current?.scrollTo).toBeInstanceOf(jest.fn().constructor); }); describe('ref', () => { - it('receives an instance or null', () => { + it('receives an instance or null', async () => { jest.dontMock('../ScrollView'); const scrollViewRef = jest.fn(); - const testRendererInstance = ReactTestRenderer.create( + const testRendererInstance = await create( , ); @@ -62,16 +62,16 @@ describe('ScrollView', () => { expect.objectContaining({_nativeTag: expect.any(Number)}), ); - testRendererInstance.unmount(); + await unmount(testRendererInstance); expect(scrollViewRef).toHaveBeenLastCalledWith(null); }); - it('transitions between refs', () => { + it('transitions between refs', async () => { jest.dontMock('../ScrollView'); const scrollViewRefA = jest.fn(); - const testRendererInstance = ReactTestRenderer.create( + const testRendererInstance = await create( , ); @@ -80,7 +80,7 @@ describe('ScrollView', () => { ); const scrollViewRefB = jest.fn(); - testRendererInstance.update(); + await update(testRendererInstance, ); expect(scrollViewRefA).toHaveBeenLastCalledWith(null); expect(scrollViewRefB).toHaveBeenLastCalledWith( @@ -90,11 +90,11 @@ describe('ScrollView', () => { }); describe('innerViewRef', () => { - it('receives an instance or null', () => { + it('receives an instance or null', async () => { jest.dontMock('../ScrollView'); const innerViewRef = jest.fn(); - const testRendererInstance = ReactTestRenderer.create( + const testRendererInstance = await create( , ); @@ -102,16 +102,16 @@ describe('ScrollView', () => { expect.objectContaining({_nativeTag: expect.any(Number)}), ); - testRendererInstance.unmount(); + await unmount(testRendererInstance); expect(innerViewRef).toHaveBeenLastCalledWith(null); }); - it('transitions between refs', () => { + it('transitions between refs', async () => { jest.dontMock('../ScrollView'); const innerViewRefA = jest.fn(); - const testRendererInstance = ReactTestRenderer.create( + const testRendererInstance = await create( , ); @@ -120,7 +120,11 @@ describe('ScrollView', () => { ); const innerViewRefB = jest.fn(); - testRendererInstance.update(); + + await update( + testRendererInstance, + , + ); expect(innerViewRefA).toHaveBeenLastCalledWith(null); expect(innerViewRefB).toHaveBeenLastCalledWith( @@ -130,11 +134,11 @@ describe('ScrollView', () => { }); describe('getInnerViewRef', () => { - it('returns an instance', () => { + it('returns an instance', async () => { jest.dontMock('../ScrollView'); const scrollViewRef = React.createRef(null); - ReactTestRenderer.create(); + await create(); const innerViewRef = scrollViewRef.current.getInnerViewRef(); // This is checking if the ref acts like a host component. If we had an diff --git a/packages/react-native/jest/renderer.js b/packages/react-native/jest/renderer.js index 97bc909290e..db97a3dd089 100644 --- a/packages/react-native/jest/renderer.js +++ b/packages/react-native/jest/renderer.js @@ -24,3 +24,18 @@ export async function create( }); return nullthrows(component); } + +export async function unmount(testRenderer: ReactTestRenderer) { + await TestRenderer.act(async () => { + testRenderer.unmount(); + }); +} + +export async function update( + testRenderer: ReactTestRenderer, + element: React.Element, +) { + await TestRenderer.act(async () => { + testRenderer.update(element); + }); +}