mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
3ff1540e9b
## Summary Prefer `getChildrenAsJSX` or `toMatchRenderedOutput` over `getChildren`. Use `dangerouslyGetChildren` if you really need to (e.g. for `toBe` assertions). Prefer `getPendingChildrenAsJSX` over `getPendingChildren`. Use `dangerouslyGetPendingChildren` if you really need to (e.g. for `toBe` assertions). `ReactNoop.getChildren` contains the fibers as non-enumerable properties. If you pass the children to `toEqual` and have a mismatch, Jest performance is very poor (to the point of causing out-of-memory crashes e.g. https://app.circleci.com/pipelines/github/facebook/react/38084/workflows/02ca0cbb-bab4-4c19-8d7d-ada814eeebb9/jobs/624297/parallel-runs/5?filterBy=ALL&invite=true#step-106-27). Mismatches can sometimes be intended e.g. on gated tests. Instead, I converted almost all of the `toEqual` assertions to `toMatchRenderedOutput` assertions or compare the JSX instead. For ReactNoopPersistent we still use `getChildren` since we have assertions on referential equality. `toMatchRenderedOutput` is more accurate in some instances anyway. I highlighted some of those more accurate assertions in review-comments. ## How did you test this change? - [x] `CIRCLE_NODE_TOTAL=20 CIRCLE_NODE_INDEX=5 yarn test -r=experimental --env=development --ci`: Can take up to 350s (and use up to 7GB of memory) on `main` but 11s on this branch - [x] No more slow `yarn test` parallel runs of `yarn_test` jobs (the steps in these runs should take <1min but sometimes they take 3min and end with OOM like https://app.circleci.com/pipelines/github/facebook/react/38084/workflows/02ca0cbb-bab4-4c19-8d7d-ada814eeebb9/jobs/624258/parallel-runs/5?filterBy=ALL: Looks good with a sample size of 1 https://app.circleci.com/pipelines/github/facebook/react/38110/workflows/745109a2-b86b-429f-8c01-9b23a245417a/jobs/624651
58 lines
1.3 KiB
JavaScript
58 lines
1.3 KiB
JavaScript
/**
|
|
* 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
|
|
*/
|
|
|
|
/**
|
|
* This is a renderer of React that doesn't have a render target output.
|
|
* It is useful to demonstrate the internals of the reconciler in isolation
|
|
* and for testing semantics of reconciliation separate from the host
|
|
* environment.
|
|
*/
|
|
|
|
import ReactFiberReconciler from 'react-reconciler';
|
|
import createReactNoop from './createReactNoop';
|
|
|
|
export const {
|
|
_Scheduler,
|
|
getChildren,
|
|
dangerouslyGetChildren,
|
|
getPendingChildren,
|
|
dangerouslyGetPendingChildren,
|
|
getOrCreateRootContainer,
|
|
createRoot,
|
|
createLegacyRoot,
|
|
getChildrenAsJSX,
|
|
getPendingChildrenAsJSX,
|
|
createPortal,
|
|
render,
|
|
renderLegacySyncRoot,
|
|
renderToRootWithID,
|
|
unmountRootWithID,
|
|
findInstance,
|
|
flushNextYield,
|
|
flushWithHostCounters,
|
|
expire,
|
|
flushExpired,
|
|
batchedUpdates,
|
|
deferredUpdates,
|
|
discreteUpdates,
|
|
idleUpdates,
|
|
flushDiscreteUpdates,
|
|
flushSync,
|
|
flushPassiveEffects,
|
|
act,
|
|
dumpTree,
|
|
getRoot,
|
|
// TODO: Remove this once callers migrate to alternatives.
|
|
// This should only be used by React internals.
|
|
unstable_runWithPriority,
|
|
} = createReactNoop(
|
|
ReactFiberReconciler, // reconciler
|
|
false, // useMutation
|
|
);
|