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. ',
+ );
+ });
+});