From e2453e2007083a67bf93f59c8ef2f39df2aaf636 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Fri, 25 Jun 2021 15:39:46 -0400 Subject: [PATCH] act: Add test for bypassing queueMicrotask (#21743) Test for fix added in #21740 --- .../src/__tests__/ReactIsomorphicAct-test.js | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 packages/react-reconciler/src/__tests__/ReactIsomorphicAct-test.js diff --git a/packages/react-reconciler/src/__tests__/ReactIsomorphicAct-test.js b/packages/react-reconciler/src/__tests__/ReactIsomorphicAct-test.js new file mode 100644 index 0000000000000..08d9bc568837e --- /dev/null +++ b/packages/react-reconciler/src/__tests__/ReactIsomorphicAct-test.js @@ -0,0 +1,50 @@ +/** + * Copyright (c) Facebook, Inc. and its 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() + +let React; +let ReactNoop; +let act; +let DiscreteEventPriority; + +describe('isomorphic act()', () => { + beforeEach(() => { + React = require('react'); + ReactNoop = require('react-noop-renderer'); + DiscreteEventPriority = require('react-reconciler/constants') + .DiscreteEventPriority; + act = React.unstable_act; + }); + + // @gate __DEV__ + test('bypasses queueMicrotask', async () => { + const root = ReactNoop.createRoot(); + + // First test what happens without wrapping in act. This update would + // normally be queued in a microtask. + ReactNoop.unstable_runWithPriority(DiscreteEventPriority, () => { + root.render('A'); + }); + // Nothing has rendered yet + expect(root).toMatchRenderedOutput(null); + // Flush the microtasks by awaiting + await null; + expect(root).toMatchRenderedOutput('A'); + + // Now do the same thing but wrap the update with `act`. No + // `await` necessary. + act(() => { + ReactNoop.unstable_runWithPriority(DiscreteEventPriority, () => { + root.render('B'); + }); + }); + expect(root).toMatchRenderedOutput('B'); + }); +});