diff --git a/packages/react-cs-renderer/src/__tests__/ReactNativeCS-test.internal.js b/packages/react-cs-renderer/src/__tests__/ReactNativeCS-test.internal.js index cd6ac7d2d5c4..7f172c57cc3e 100644 --- a/packages/react-cs-renderer/src/__tests__/ReactNativeCS-test.internal.js +++ b/packages/react-cs-renderer/src/__tests__/ReactNativeCS-test.internal.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-dom/src/__tests__/ReactServerRendering-test.js b/packages/react-dom/src/__tests__/ReactServerRendering-test.js index 1cb2915b7dfa..642d950f229b 100644 --- a/packages/react-dom/src/__tests__/ReactServerRendering-test.js +++ b/packages/react-dom/src/__tests__/ReactServerRendering-test.js @@ -5,15 +5,14 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; let React; let ReactCallReturn; -let ReactDOM; let ReactDOMServer; -let ReactTestUtils; let PropTypes; function normalizeCodeLocInfo(str) { @@ -25,8 +24,6 @@ describe('ReactDOMServer', () => { jest.resetModules(); React = require('react'); ReactCallReturn = require('react-call-return'); - ReactDOM = require('react-dom'); - ReactTestUtils = require('react-dom/test-utils'); PropTypes = require('prop-types'); ReactDOMServer = require('react-dom/server'); }); @@ -157,243 +154,6 @@ describe('ReactDOMServer', () => { runTest(); }); - it('should have the correct mounting behavior (old hydrate API)', () => { - spyOnDev(console, 'warn'); - spyOnDev(console, 'error'); - - let mountCount = 0; - let numClicks = 0; - - class TestComponent extends React.Component { - componentDidMount() { - mountCount++; - } - - click = () => { - numClicks++; - }; - - render() { - return ( - - Name: {this.props.name} - - ); - } - } - - const element = document.createElement('div'); - ReactDOM.render(, element); - - let lastMarkup = element.innerHTML; - - // Exercise the update path. Markup should not change, - // but some lifecycle methods should be run again. - ReactDOM.render(, element); - expect(mountCount).toEqual(1); - - // Unmount and remount. We should get another mount event and - // we should get different markup, as the IDs are unique each time. - ReactDOM.unmountComponentAtNode(element); - expect(element.innerHTML).toEqual(''); - ReactDOM.render(, element); - expect(mountCount).toEqual(2); - expect(element.innerHTML).not.toEqual(lastMarkup); - - // Now kill the node and render it on top of server-rendered markup, as if - // we used server rendering. We should mount again, but the markup should - // be unchanged. We will append a sentinel at the end of innerHTML to be - // sure that innerHTML was not changed. - ReactDOM.unmountComponentAtNode(element); - expect(element.innerHTML).toEqual(''); - - lastMarkup = ReactDOMServer.renderToString(); - element.innerHTML = lastMarkup; - - let instance = ReactDOM.render(, element); - expect(mountCount).toEqual(3); - if (__DEV__) { - expect(console.warn.calls.count()).toBe(1); - expect(console.warn.calls.argsFor(0)[0]).toContain( - 'render(): Calling ReactDOM.render() to hydrate server-rendered markup ' + - 'will stop working in React v17. Replace the ReactDOM.render() call ' + - 'with ReactDOM.hydrate() if you want React to attach to the server HTML.', - ); - console.warn.calls.reset(); - } - expect(element.innerHTML).toBe(lastMarkup); - - // Ensure the events system works after mount into server markup - expect(numClicks).toEqual(0); - ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance.refs.span)); - expect(numClicks).toEqual(1); - - ReactDOM.unmountComponentAtNode(element); - expect(element.innerHTML).toEqual(''); - - // Now simulate a situation where the app is not idempotent. React should - // warn but do the right thing. - element.innerHTML = lastMarkup; - instance = ReactDOM.render(, element); - expect(mountCount).toEqual(4); - if (__DEV__) { - expect(console.error.calls.count()).toBe(1); - expect(console.error.calls.argsFor(0)[0]).toContain( - 'Text content did not match. Server: "x" Client: "y"', - ); - console.error.calls.reset(); - } - expect(element.innerHTML.length > 0).toBe(true); - expect(element.innerHTML).not.toEqual(lastMarkup); - - // Ensure the events system works after markup mismatch. - expect(numClicks).toEqual(1); - ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance.refs.span)); - expect(numClicks).toEqual(2); - if (__DEV__) { - expect(console.warn.calls.count()).toBe(0); - expect(console.error.calls.count()).toBe(0); - } - }); - - it('should have the correct mounting behavior (new hydrate API)', () => { - spyOnDev(console, 'error'); - - let mountCount = 0; - let numClicks = 0; - - class TestComponent extends React.Component { - componentDidMount() { - mountCount++; - } - - click = () => { - numClicks++; - }; - - render() { - return ( - - Name: {this.props.name} - - ); - } - } - - const element = document.createElement('div'); - ReactDOM.render(, element); - - let lastMarkup = element.innerHTML; - - // Exercise the update path. Markup should not change, - // but some lifecycle methods should be run again. - ReactDOM.render(, element); - expect(mountCount).toEqual(1); - - // Unmount and remount. We should get another mount event and - // we should get different markup, as the IDs are unique each time. - ReactDOM.unmountComponentAtNode(element); - expect(element.innerHTML).toEqual(''); - ReactDOM.render(, element); - expect(mountCount).toEqual(2); - expect(element.innerHTML).not.toEqual(lastMarkup); - - // Now kill the node and render it on top of server-rendered markup, as if - // we used server rendering. We should mount again, but the markup should - // be unchanged. We will append a sentinel at the end of innerHTML to be - // sure that innerHTML was not changed. - ReactDOM.unmountComponentAtNode(element); - expect(element.innerHTML).toEqual(''); - - lastMarkup = ReactDOMServer.renderToString(); - element.innerHTML = lastMarkup; - - let instance = ReactDOM.hydrate(, element); - expect(mountCount).toEqual(3); - expect(element.innerHTML).toBe(lastMarkup); - - // Ensure the events system works after mount into server markup - expect(numClicks).toEqual(0); - ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance.refs.span)); - expect(numClicks).toEqual(1); - - ReactDOM.unmountComponentAtNode(element); - expect(element.innerHTML).toEqual(''); - - // Now simulate a situation where the app is not idempotent. React should - // warn but do the right thing. - element.innerHTML = lastMarkup; - instance = ReactDOM.hydrate(, element); - expect(mountCount).toEqual(4); - if (__DEV__) { - expect(console.error.calls.count()).toBe(1); - } - expect(element.innerHTML.length > 0).toBe(true); - expect(element.innerHTML).not.toEqual(lastMarkup); - - // Ensure the events system works after markup mismatch. - expect(numClicks).toEqual(1); - ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance.refs.span)); - expect(numClicks).toEqual(2); - }); - - // We have a polyfill for autoFocus on the client, but we intentionally don't - // want it to call focus() when hydrating because this can mess up existing - // focus before the JS has loaded. - it('should emit autofocus on the server but not focus() when hydrating', () => { - const element = document.createElement('div'); - element.innerHTML = ReactDOMServer.renderToString( - , - ); - expect(element.firstChild.autofocus).toBe(true); - - // It should not be called on mount. - element.firstChild.focus = jest.fn(); - ReactDOM.hydrate(, element); - expect(element.firstChild.focus).not.toHaveBeenCalled(); - - // Or during an update. - ReactDOM.render(, element); - expect(element.firstChild.focus).not.toHaveBeenCalled(); - }); - - it('should not focus on either server or client with autofocus={false}', () => { - const element = document.createElement('div'); - element.innerHTML = ReactDOMServer.renderToString( - , - ); - expect(element.firstChild.autofocus).toBe(false); - - element.firstChild.focus = jest.fn(); - ReactDOM.hydrate(, element); - expect(element.firstChild.focus).not.toHaveBeenCalled(); - - ReactDOM.render(, element); - expect(element.firstChild.focus).not.toHaveBeenCalled(); - }); - - // Regression test for https://github.com/facebook/react/issues/11726 - it('should not focus on either server or client with autofocus={false} even if there is a markup mismatch', () => { - spyOnDev(console, 'error'); - - const element = document.createElement('div'); - element.innerHTML = ReactDOMServer.renderToString( - , - ); - expect(element.firstChild.autofocus).toBe(false); - - element.firstChild.focus = jest.fn(); - ReactDOM.hydrate(, element); - - expect(element.firstChild.focus).not.toHaveBeenCalled(); - if (__DEV__) { - expect(console.error.calls.count()).toBe(1); - expect(console.error.calls.argsFor(0)[0]).toBe( - 'Warning: Text content did not match. Server: "server" Client: "client"', - ); - } - }); - it('should throw with silly args', () => { expect( ReactDOMServer.renderToString.bind(ReactDOMServer, {x: 123}), @@ -797,20 +557,7 @@ describe('ReactDOMServer', () => { } }); - it('should throw rendering portals on the server', () => { - const div = document.createElement('div'); - expect(() => { - ReactDOMServer.renderToString( -
{ReactDOM.createPortal(
, div)}
, - ); - }).toThrow( - 'Portals are not currently supported by the server renderer. ' + - 'Render them conditionally so that they only appear on the client render.', - ); - }); - it('should throw rendering call/return on the server', () => { - const div = document.createElement('div'); expect(() => { ReactDOMServer.renderToString(
{ReactCallReturn.unstable_createReturn(42)}
, diff --git a/packages/react-dom/src/__tests__/ReactServerRenderingBrowser-test.js b/packages/react-dom/src/__tests__/ReactServerRenderingBrowser-test.js index f4f54a91d283..c3a3ff11d783 100644 --- a/packages/react-dom/src/__tests__/ReactServerRenderingBrowser-test.js +++ b/packages/react-dom/src/__tests__/ReactServerRenderingBrowser-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-dom/src/__tests__/ReactServerRenderingHydration.js b/packages/react-dom/src/__tests__/ReactServerRenderingHydration.js new file mode 100644 index 000000000000..928d7a98ef19 --- /dev/null +++ b/packages/react-dom/src/__tests__/ReactServerRenderingHydration.js @@ -0,0 +1,276 @@ +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @emails react-core + */ + +'use strict'; + +let React; +let ReactDOM; +let ReactDOMServer; +let ReactTestUtils; + +// These tests rely both on ReactDOMServer and ReactDOM. +// If a test only needs ReactDOMServer, put it in ReactServerRendering-test instead. +describe('ReactDOMServerHydration', () => { + beforeEach(() => { + jest.resetModules(); + React = require('react'); + ReactDOM = require('react-dom'); + ReactTestUtils = require('react-dom/test-utils'); + ReactDOMServer = require('react-dom/server'); + }); + + it('should have the correct mounting behavior (old hydrate API)', () => { + spyOnDev(console, 'warn'); + spyOnDev(console, 'error'); + + let mountCount = 0; + let numClicks = 0; + + class TestComponent extends React.Component { + componentDidMount() { + mountCount++; + } + + click = () => { + numClicks++; + }; + + render() { + return ( + + Name: {this.props.name} + + ); + } + } + + const element = document.createElement('div'); + ReactDOM.render(, element); + + let lastMarkup = element.innerHTML; + + // Exercise the update path. Markup should not change, + // but some lifecycle methods should be run again. + ReactDOM.render(, element); + expect(mountCount).toEqual(1); + + // Unmount and remount. We should get another mount event and + // we should get different markup, as the IDs are unique each time. + ReactDOM.unmountComponentAtNode(element); + expect(element.innerHTML).toEqual(''); + ReactDOM.render(, element); + expect(mountCount).toEqual(2); + expect(element.innerHTML).not.toEqual(lastMarkup); + + // Now kill the node and render it on top of server-rendered markup, as if + // we used server rendering. We should mount again, but the markup should + // be unchanged. We will append a sentinel at the end of innerHTML to be + // sure that innerHTML was not changed. + ReactDOM.unmountComponentAtNode(element); + expect(element.innerHTML).toEqual(''); + + lastMarkup = ReactDOMServer.renderToString(); + element.innerHTML = lastMarkup; + + let instance = ReactDOM.render(, element); + expect(mountCount).toEqual(3); + if (__DEV__) { + expect(console.warn.calls.count()).toBe(1); + expect(console.warn.calls.argsFor(0)[0]).toContain( + 'render(): Calling ReactDOM.render() to hydrate server-rendered markup ' + + 'will stop working in React v17. Replace the ReactDOM.render() call ' + + 'with ReactDOM.hydrate() if you want React to attach to the server HTML.', + ); + console.warn.calls.reset(); + } + expect(element.innerHTML).toBe(lastMarkup); + + // Ensure the events system works after mount into server markup + expect(numClicks).toEqual(0); + ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance.refs.span)); + expect(numClicks).toEqual(1); + + ReactDOM.unmountComponentAtNode(element); + expect(element.innerHTML).toEqual(''); + + // Now simulate a situation where the app is not idempotent. React should + // warn but do the right thing. + element.innerHTML = lastMarkup; + instance = ReactDOM.render(, element); + expect(mountCount).toEqual(4); + if (__DEV__) { + expect(console.error.calls.count()).toBe(1); + expect(console.error.calls.argsFor(0)[0]).toContain( + 'Text content did not match. Server: "x" Client: "y"', + ); + console.error.calls.reset(); + } + expect(element.innerHTML.length > 0).toBe(true); + expect(element.innerHTML).not.toEqual(lastMarkup); + + // Ensure the events system works after markup mismatch. + expect(numClicks).toEqual(1); + ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance.refs.span)); + expect(numClicks).toEqual(2); + if (__DEV__) { + expect(console.warn.calls.count()).toBe(0); + expect(console.error.calls.count()).toBe(0); + } + }); + + it('should have the correct mounting behavior (new hydrate API)', () => { + spyOnDev(console, 'error'); + + let mountCount = 0; + let numClicks = 0; + + class TestComponent extends React.Component { + componentDidMount() { + mountCount++; + } + + click = () => { + numClicks++; + }; + + render() { + return ( + + Name: {this.props.name} + + ); + } + } + + const element = document.createElement('div'); + ReactDOM.render(, element); + + let lastMarkup = element.innerHTML; + + // Exercise the update path. Markup should not change, + // but some lifecycle methods should be run again. + ReactDOM.render(, element); + expect(mountCount).toEqual(1); + + // Unmount and remount. We should get another mount event and + // we should get different markup, as the IDs are unique each time. + ReactDOM.unmountComponentAtNode(element); + expect(element.innerHTML).toEqual(''); + ReactDOM.render(, element); + expect(mountCount).toEqual(2); + expect(element.innerHTML).not.toEqual(lastMarkup); + + // Now kill the node and render it on top of server-rendered markup, as if + // we used server rendering. We should mount again, but the markup should + // be unchanged. We will append a sentinel at the end of innerHTML to be + // sure that innerHTML was not changed. + ReactDOM.unmountComponentAtNode(element); + expect(element.innerHTML).toEqual(''); + + lastMarkup = ReactDOMServer.renderToString(); + element.innerHTML = lastMarkup; + + let instance = ReactDOM.hydrate(, element); + expect(mountCount).toEqual(3); + expect(element.innerHTML).toBe(lastMarkup); + + // Ensure the events system works after mount into server markup + expect(numClicks).toEqual(0); + ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance.refs.span)); + expect(numClicks).toEqual(1); + + ReactDOM.unmountComponentAtNode(element); + expect(element.innerHTML).toEqual(''); + + // Now simulate a situation where the app is not idempotent. React should + // warn but do the right thing. + element.innerHTML = lastMarkup; + instance = ReactDOM.hydrate(, element); + expect(mountCount).toEqual(4); + if (__DEV__) { + expect(console.error.calls.count()).toBe(1); + } + expect(element.innerHTML.length > 0).toBe(true); + expect(element.innerHTML).not.toEqual(lastMarkup); + + // Ensure the events system works after markup mismatch. + expect(numClicks).toEqual(1); + ReactTestUtils.Simulate.click(ReactDOM.findDOMNode(instance.refs.span)); + expect(numClicks).toEqual(2); + }); + + // We have a polyfill for autoFocus on the client, but we intentionally don't + // want it to call focus() when hydrating because this can mess up existing + // focus before the JS has loaded. + it('should emit autofocus on the server but not focus() when hydrating', () => { + const element = document.createElement('div'); + element.innerHTML = ReactDOMServer.renderToString( + , + ); + expect(element.firstChild.autofocus).toBe(true); + + // It should not be called on mount. + element.firstChild.focus = jest.fn(); + ReactDOM.hydrate(, element); + expect(element.firstChild.focus).not.toHaveBeenCalled(); + + // Or during an update. + ReactDOM.render(, element); + expect(element.firstChild.focus).not.toHaveBeenCalled(); + }); + + it('should not focus on either server or client with autofocus={false}', () => { + const element = document.createElement('div'); + element.innerHTML = ReactDOMServer.renderToString( + , + ); + expect(element.firstChild.autofocus).toBe(false); + + element.firstChild.focus = jest.fn(); + ReactDOM.hydrate(, element); + expect(element.firstChild.focus).not.toHaveBeenCalled(); + + ReactDOM.render(, element); + expect(element.firstChild.focus).not.toHaveBeenCalled(); + }); + + // Regression test for https://github.com/facebook/react/issues/11726 + it('should not focus on either server or client with autofocus={false} even if there is a markup mismatch', () => { + spyOnDev(console, 'error'); + + const element = document.createElement('div'); + element.innerHTML = ReactDOMServer.renderToString( + , + ); + expect(element.firstChild.autofocus).toBe(false); + + element.firstChild.focus = jest.fn(); + ReactDOM.hydrate(, element); + + expect(element.firstChild.focus).not.toHaveBeenCalled(); + if (__DEV__) { + expect(console.error.calls.count()).toBe(1); + expect(console.error.calls.argsFor(0)[0]).toBe( + 'Warning: Text content did not match. Server: "server" Client: "client"', + ); + } + }); + + it('should throw rendering portals on the server', () => { + const div = document.createElement('div'); + expect(() => { + ReactDOMServer.renderToString( +
{ReactDOM.createPortal(
, div)}
, + ); + }).toThrow( + 'Portals are not currently supported by the server renderer. ' + + 'Render them conditionally so that they only appear on the client render.', + ); + }); +}); diff --git a/packages/react-native-renderer/src/__tests__/ReactNativeAttributePayload-test.js b/packages/react-native-renderer/src/__tests__/ReactNativeAttributePayload-test.js index b7a2392805f6..30423b2f0d8e 100644 --- a/packages/react-native-renderer/src/__tests__/ReactNativeAttributePayload-test.js +++ b/packages/react-native-renderer/src/__tests__/ReactNativeAttributePayload-test.js @@ -4,6 +4,7 @@ * 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 */ 'use strict'; diff --git a/packages/react-native-renderer/src/__tests__/ReactNativeEvents-test.internal.js b/packages/react-native-renderer/src/__tests__/ReactNativeEvents-test.internal.js index 6e9f667aa366..b3a867ca14a4 100644 --- a/packages/react-native-renderer/src/__tests__/ReactNativeEvents-test.internal.js +++ b/packages/react-native-renderer/src/__tests__/ReactNativeEvents-test.internal.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-native-renderer/src/__tests__/ReactNativeMount-test.internal.js b/packages/react-native-renderer/src/__tests__/ReactNativeMount-test.internal.js index 0ac0d5eb7262..238ca097fccd 100644 --- a/packages/react-native-renderer/src/__tests__/ReactNativeMount-test.internal.js +++ b/packages/react-native-renderer/src/__tests__/ReactNativeMount-test.internal.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-native-renderer/src/__tests__/createReactNativeComponentClass-test.internal.js b/packages/react-native-renderer/src/__tests__/createReactNativeComponentClass-test.internal.js index 23110a1375cb..47f943fcd67c 100644 --- a/packages/react-native-renderer/src/__tests__/createReactNativeComponentClass-test.internal.js +++ b/packages/react-native-renderer/src/__tests__/createReactNativeComponentClass-test.internal.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactExpiration-test.js b/packages/react-reconciler/src/__tests__/ReactExpiration-test.js index 1227237f7db9..ec6a133d6d69 100644 --- a/packages/react-reconciler/src/__tests__/ReactExpiration-test.js +++ b/packages/react-reconciler/src/__tests__/ReactExpiration-test.js @@ -3,6 +3,8 @@ * * 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 */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactFiberHostContext-test.js b/packages/react-reconciler/src/__tests__/ReactFiberHostContext-test.js index 2441bd312439..44e5d61ba52b 100644 --- a/packages/react-reconciler/src/__tests__/ReactFiberHostContext-test.js +++ b/packages/react-reconciler/src/__tests__/ReactFiberHostContext-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactFragment-test.js b/packages/react-reconciler/src/__tests__/ReactFragment-test.js index 00ae2aa2e92d..d8974c7efada 100644 --- a/packages/react-reconciler/src/__tests__/ReactFragment-test.js +++ b/packages/react-reconciler/src/__tests__/ReactFragment-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactIncremental-test.js b/packages/react-reconciler/src/__tests__/ReactIncremental-test.js index 72ba93fc098b..f12056aa5dd7 100644 --- a/packages/react-reconciler/src/__tests__/ReactIncremental-test.js +++ b/packages/react-reconciler/src/__tests__/ReactIncremental-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactIncrementalErrorHandling-test.js b/packages/react-reconciler/src/__tests__/ReactIncrementalErrorHandling-test.js index f9bb085e8927..80210157e00b 100644 --- a/packages/react-reconciler/src/__tests__/ReactIncrementalErrorHandling-test.js +++ b/packages/react-reconciler/src/__tests__/ReactIncrementalErrorHandling-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactIncrementalErrorLogging-test.internal.js b/packages/react-reconciler/src/__tests__/ReactIncrementalErrorLogging-test.internal.js index e43dcd4b854f..15630c1f4967 100644 --- a/packages/react-reconciler/src/__tests__/ReactIncrementalErrorLogging-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactIncrementalErrorLogging-test.internal.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactIncrementalPerf-test.internal.js b/packages/react-reconciler/src/__tests__/ReactIncrementalPerf-test.internal.js index e1e21dc2fc09..72a0fc167ba0 100644 --- a/packages/react-reconciler/src/__tests__/ReactIncrementalPerf-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactIncrementalPerf-test.internal.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactIncrementalReflection-test.js b/packages/react-reconciler/src/__tests__/ReactIncrementalReflection-test.js index ec73068fe525..4bce387b0531 100644 --- a/packages/react-reconciler/src/__tests__/ReactIncrementalReflection-test.js +++ b/packages/react-reconciler/src/__tests__/ReactIncrementalReflection-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactIncrementalScheduling-test.js b/packages/react-reconciler/src/__tests__/ReactIncrementalScheduling-test.js index 71c77d5632ef..cf31bedb53fc 100644 --- a/packages/react-reconciler/src/__tests__/ReactIncrementalScheduling-test.js +++ b/packages/react-reconciler/src/__tests__/ReactIncrementalScheduling-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactIncrementalSideEffects-test.js b/packages/react-reconciler/src/__tests__/ReactIncrementalSideEffects-test.js index e1dbf3286b5b..d31de9d2f925 100644 --- a/packages/react-reconciler/src/__tests__/ReactIncrementalSideEffects-test.js +++ b/packages/react-reconciler/src/__tests__/ReactIncrementalSideEffects-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactIncrementalTriangle-test.js b/packages/react-reconciler/src/__tests__/ReactIncrementalTriangle-test.js index 1acc0cfd6065..fae9bc1646cb 100644 --- a/packages/react-reconciler/src/__tests__/ReactIncrementalTriangle-test.js +++ b/packages/react-reconciler/src/__tests__/ReactIncrementalTriangle-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactIncrementalUpdates-test.js b/packages/react-reconciler/src/__tests__/ReactIncrementalUpdates-test.js index b312040d78b9..6f43d9753534 100644 --- a/packages/react-reconciler/src/__tests__/ReactIncrementalUpdates-test.js +++ b/packages/react-reconciler/src/__tests__/ReactIncrementalUpdates-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactPersistent-test.internal.js b/packages/react-reconciler/src/__tests__/ReactPersistent-test.internal.js index e7e5b9e840ab..1445ddb798c4 100644 --- a/packages/react-reconciler/src/__tests__/ReactPersistent-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactPersistent-test.internal.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactTopLevelFragment-test.js b/packages/react-reconciler/src/__tests__/ReactTopLevelFragment-test.js index acda266ecf64..55ef35f3e811 100644 --- a/packages/react-reconciler/src/__tests__/ReactTopLevelFragment-test.js +++ b/packages/react-reconciler/src/__tests__/ReactTopLevelFragment-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-reconciler/src/__tests__/ReactTopLevelText-test.js b/packages/react-reconciler/src/__tests__/ReactTopLevelText-test.js index ec887b060017..130f55d85d30 100644 --- a/packages/react-reconciler/src/__tests__/ReactTopLevelText-test.js +++ b/packages/react-reconciler/src/__tests__/ReactTopLevelText-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-rt-renderer/src/__tests__/ReactNativeRT-test.internal.js b/packages/react-rt-renderer/src/__tests__/ReactNativeRT-test.internal.js index d8ad0d848423..fabbe5194243 100644 --- a/packages/react-rt-renderer/src/__tests__/ReactNativeRT-test.internal.js +++ b/packages/react-rt-renderer/src/__tests__/ReactNativeRT-test.internal.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js b/packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js index a551bc35ab33..21247968db93 100644 --- a/packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js +++ b/packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-test-renderer/src/__tests__/ReactTestRenderer-test.js b/packages/react-test-renderer/src/__tests__/ReactTestRenderer-test.js index a1dae0c79e97..3d461d293b53 100644 --- a/packages/react-test-renderer/src/__tests__/ReactTestRenderer-test.js +++ b/packages/react-test-renderer/src/__tests__/ReactTestRenderer-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/packages/react-test-renderer/src/__tests__/ReactTestRendererTraversal-test.js b/packages/react-test-renderer/src/__tests__/ReactTestRendererTraversal-test.js index 462cb949861a..587a094f8ab7 100644 --- a/packages/react-test-renderer/src/__tests__/ReactTestRendererTraversal-test.js +++ b/packages/react-test-renderer/src/__tests__/ReactTestRendererTraversal-test.js @@ -5,6 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @emails react-core + * @jest-environment node */ 'use strict'; diff --git a/scripts/jest/setupEnvironment.js b/scripts/jest/setupEnvironment.js index ea10c6bf4144..841bf5863046 100644 --- a/scripts/jest/setupEnvironment.js +++ b/scripts/jest/setupEnvironment.js @@ -31,4 +31,6 @@ global.cancelIdleCallback = function(callbackID) { // for the few that specifically test the logging by shadowing this // property. In real apps, it would usually not be defined at all. Error.prototype.suppressReactErrorLogging = true; -DOMException.prototype.suppressReactErrorLogging = true; +if (typeof DOMException === 'function') { + DOMException.prototype.suppressReactErrorLogging = true; +}