Skip to content

Commit f4b49da

Browse files
committed
Use testing builds for our own tests
Following up from facebook#17915 where we generated testing builds for `react-dom`, this PR uses those builds for our own tests. - fixes `ReactFeatureFlags.testing` to use all the default flags - changes `ReactFeatureFlags.readonly` to return `isTestEnvironment: true` (this might not strictly be needed) - with jest, mocks `react-dom` with the testing version, both for source and builds - uses `ReactDOM.act` in one of these tests to verify it actually works
1 parent 9e158c0 commit f4b49da

File tree

7 files changed

+23
-16
lines changed

7 files changed

+23
-16
lines changed

packages/react-dom/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"README.md",
3131
"build-info.json",
3232
"index.js",
33+
"testing.js",
3334
"profiling.js",
3435
"server.js",
3536
"server.browser.js",

packages/react-dom/src/__tests__/ReactDOMSuspensePlaceholder-test.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ let React;
1313
let ReactDOM;
1414
let Suspense;
1515
let ReactCache;
16-
let ReactTestUtils;
1716
let Scheduler;
1817
let TextResource;
1918
let act;
@@ -26,9 +25,8 @@ describe('ReactDOMSuspensePlaceholder', () => {
2625
React = require('react');
2726
ReactDOM = require('react-dom');
2827
ReactCache = require('react-cache');
29-
ReactTestUtils = require('react-dom/test-utils');
3028
Scheduler = require('scheduler');
31-
act = ReactTestUtils.act;
29+
act = ReactDOM.act;
3230
Suspense = React.Suspense;
3331
container = document.createElement('div');
3432
document.body.appendChild(container);

packages/shared/forks/ReactFeatureFlags.readonly.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
// It lets us determine whether we're running in Fire mode without making tests internal.
1010
const ReactFeatureFlags = require('../ReactFeatureFlags');
1111
// Forbid writes because this wouldn't work with bundle tests.
12-
module.exports = Object.freeze({...ReactFeatureFlags});
12+
module.exports = Object.freeze({...ReactFeatureFlags, isTestEnvironment: true});

packages/shared/forks/ReactFeatureFlags.testing.js

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,25 @@
77
* @flow
88
*/
99

10-
import invariant from 'shared/invariant';
10+
// keep in sync with ReactFeatureFlags.js
11+
// only isTestEnvironment is different, and true
1112

1213
import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
1314
import typeof * as PersistentFeatureFlagsType from './ReactFeatureFlags.persistent';
1415

15-
export const debugRenderPhaseSideEffectsForStrictMode = false;
1616
export const enableUserTimingAPI = __DEV__;
17+
export const debugRenderPhaseSideEffectsForStrictMode = __DEV__;
18+
export const replayFailedUnitOfWorkWithInvokeGuardedCallback = __DEV__;
1719
export const warnAboutDeprecatedLifecycles = true;
18-
export const replayFailedUnitOfWorkWithInvokeGuardedCallback = false;
1920
export const enableProfilerTimer = __PROFILE__;
2021
export const enableSchedulerTracing = __PROFILE__;
21-
export const enableSuspenseServerRenderer = false;
22-
export const enableSelectiveHydration = false;
23-
export const enableChunksAPI = false;
22+
export const enableSuspenseServerRenderer = __EXPERIMENTAL__;
23+
export const enableSelectiveHydration = __EXPERIMENTAL__;
24+
export const enableChunksAPI = __EXPERIMENTAL__;
25+
export const enableSchedulerDebugging = false;
2426
export const disableJavaScriptURLs = false;
25-
export const disableInputAttributeSyncing = false;
2627
export const exposeConcurrentModeAPIs = __EXPERIMENTAL__;
2728
export const warnAboutShorthandPropertyCollision = false;
28-
export const enableSchedulerDebugging = false;
2929
export const enableDeprecatedFlareAPI = false;
3030
export const enableFundamentalAPI = false;
3131
export const enableScopeAPI = false;
@@ -34,23 +34,24 @@ export const warnAboutUnmockedScheduler = false;
3434
export const flushSuspenseFallbacksInTests = true;
3535
export const enableSuspenseCallback = false;
3636
export const warnAboutDefaultPropsOnFunctionComponents = false;
37-
export const warnAboutStringRefs = false;
38-
export const disableLegacyContext = false;
3937
export const disableSchedulerTimeoutBasedOnReactExpirationTime = false;
4038
export const enableTrainModelFix = true;
4139
export const enableTrustedTypesIntegration = false;
4240
export const enableNativeTargetAsInstance = false;
41+
export const deferPassiveEffectCleanupDuringUnmount = false;
42+
export const disableInputAttributeSyncing = false;
43+
export const warnAboutStringRefs = false;
44+
export const disableLegacyContext = false;
4345
export const disableCreateFactory = false;
4446
export const disableTextareaChildren = false;
4547
export const disableUnstableRenderSubtreeIntoContainer = false;
4648
export const warnUnstableRenderSubtreeIntoContainer = false;
4749
export const disableUnstableCreatePortal = false;
48-
export const deferPassiveEffectCleanupDuringUnmount = false;
4950
export const isTestEnvironment = true;
5051

5152
// Only used in www builds.
5253
export function addUserTimingListener() {
53-
invariant(false, 'Not implemented.');
54+
throw new Error('Not implemented.');
5455
}
5556

5657
// Flow magic to verify the exports of this file match the original version.

scripts/jest/config.base.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ module.exports = {
44
haste: {
55
hasteImplModulePath: require.resolve('./noHaste.js'),
66
},
7+
moduleNameMapper: {
8+
'^shared/ReactFeatureFlags': `<rootDir>/packages/shared/forks/ReactFeatureFlags.testing`,
9+
},
710
modulePathIgnorePatterns: [
811
'<rootDir>/scripts/rollup/shims/',
912
'<rootDir>/scripts/bench/',

scripts/jest/setupHostConfigs.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,8 @@ inlinedHostConfigs.forEach(rendererInfo => {
177177
}
178178
});
179179

180+
jest.mock('react-dom', () => require.requireActual('react-dom/testing'));
181+
180182
// Make it possible to import this module inside
181183
// the React package itself.
182184
jest.mock('shared/ReactSharedInternals', () =>

scripts/jest/setupTests.build.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
'use strict';
22

3+
jest.mock('react-dom', () => require.requireActual(`react-dom/testing`));
4+
35
jest.mock('scheduler', () => require.requireActual('scheduler/unstable_mock'));
46
jest.mock('scheduler/src/SchedulerHostConfig', () =>
57
require.requireActual('scheduler/src/forks/SchedulerHostConfig.mock.js')

0 commit comments

Comments
 (0)