diff --git a/packages/react/src/__tests__/ReactElementJSX-test.internal.js b/packages/react/src/__tests__/ReactElementJSX-test.js similarity index 93% rename from packages/react/src/__tests__/ReactElementJSX-test.internal.js rename to packages/react/src/__tests__/ReactElementJSX-test.js index 4a02bbc1a379d..194e7f359ab0a 100644 --- a/packages/react/src/__tests__/ReactElementJSX-test.internal.js +++ b/packages/react/src/__tests__/ReactElementJSX-test.js @@ -13,8 +13,6 @@ let React; let ReactDOM; let ReactTestUtils; -let ReactFeatureFlags = require('shared/ReactFeatureFlags'); - // NOTE: We're explicitly not using JSX here. This is intended to test // a new React.jsx api which does not have a JSX transformer yet. // A lot of these tests are pulled from ReactElement-test because @@ -30,9 +28,6 @@ describe('ReactElement.jsx', () => { originalSymbol = global.Symbol; global.Symbol = undefined; - ReactFeatureFlags = require('shared/ReactFeatureFlags'); - ReactFeatureFlags.warnAboutSpreadingKeyToJSX = true; - React = require('react'); ReactDOM = require('react-dom'); ReactTestUtils = require('react-dom/test-utils'); @@ -356,27 +351,6 @@ describe('ReactElement.jsx', () => { ); }); - it('should warn when keys are passed as part of props', () => { - const container = document.createElement('div'); - class Child extends React.Component { - render() { - return React.jsx('div', {}); - } - } - class Parent extends React.Component { - render() { - return React.jsx('div', { - children: [React.jsx(Child, {key: '0'})], - }); - } - } - expect(() => ReactDOM.render(React.jsx(Parent, {}), container)).toErrorDev( - 'Warning: React.jsx: Spreading a key to JSX is a deprecated pattern. ' + - 'Explicitly pass a key after spreading props in your JSX call. ' + - 'E.g. ', - ); - }); - it('should not warn when unkeyed children are passed to jsxs', () => { const container = document.createElement('div'); class Child extends React.Component { diff --git a/packages/react/src/__tests__/ReactElementJSXNewWarnings-test.internal.js b/packages/react/src/__tests__/ReactElementJSXNewWarnings-test.internal.js new file mode 100644 index 0000000000000..6d0ab6c6089d9 --- /dev/null +++ b/packages/react/src/__tests__/ReactElementJSXNewWarnings-test.internal.js @@ -0,0 +1,70 @@ +/** + * 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. + * + * @emails react-core + */ + +'use strict'; + +let React; +let ReactDOM; +let ReactTestUtils; + +let ReactFeatureFlags = require('shared/ReactFeatureFlags'); + +// NOTE: We're explicitly not using JSX here. This is intended to test +// a new React.jsx api which does not have a JSX transformer yet. +// A lot of these tests are pulled from ReactElement-test because +// this api is meant to be backwards compatible. +describe('ReactElementJSXNewWarnings', () => { + let originalSymbol; + + beforeEach(() => { + jest.resetModules(); + + // Delete the native Symbol if we have one to ensure we test the + // unpolyfilled environment. + originalSymbol = global.Symbol; + global.Symbol = undefined; + + ReactFeatureFlags = require('shared/ReactFeatureFlags'); + ReactFeatureFlags.warnAboutSpreadingKeyToJSX = true; + + React = require('react'); + ReactDOM = require('react-dom'); + ReactTestUtils = require('react-dom/test-utils'); + }); + + afterEach(() => { + global.Symbol = originalSymbol; + }); + + if (!__EXPERIMENTAL__) { + it("empty test so Jest doesn't complain", () => {}); + return; + } + + it('should warn when keys are passed as part of props', () => { + const container = document.createElement('div'); + class Child extends React.Component { + render() { + return React.jsx('div', {}); + } + } + class Parent extends React.Component { + render() { + return React.jsx('div', { + children: [React.jsx(Child, {key: '0'})], + }); + } + } + expect(() => ReactDOM.render(React.jsx(Parent, {}), container)).toErrorDev( + 'Warning: React.jsx: Spreading a key to JSX is a deprecated pattern. ' + + 'Explicitly pass a key after spreading props in your JSX call. ' + + 'E.g. ', + ); + }); +});