/** * 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. * * @jest-environment node */ // sanity tests for act() const React = require('react'); const ReactNoop = require('react-noop-renderer'); const Scheduler = require('scheduler'); const act = require('internal-test-utils').act; const {assertLog, waitForAll} = require('internal-test-utils'); // TODO: These tests are no longer specific to the noop renderer // implementation. They test the internal implementation we use in the React // test suite. describe('internal act()', () => { it('can use act to flush effects', async () => { function App(props) { React.useEffect(props.callback); return null; } const calledLog = []; await act(() => { ReactNoop.render( { calledLog.push(calledLog.length); }} />, ); }); await waitForAll([]); expect(calledLog).toEqual([0]); }); it('should work with async/await', async () => { function App() { const [ctr, setCtr] = React.useState(0); async function someAsyncFunction() { Scheduler.log('stage 1'); await null; Scheduler.log('stage 2'); await null; setCtr(1); } React.useEffect(() => { someAsyncFunction(); }, []); return ctr; } await act(() => { ReactNoop.render(); }); assertLog(['stage 1', 'stage 2']); await waitForAll([]); expect(ReactNoop).toMatchRenderedOutput('1'); }); });