Eagerly evaluate inline requires in Jest (#7245)

* Eagerly evaluate inline requires in Jest

I inlined some requires in #7188 to fix the build size regression.
However this caused an issue with Jest due to it resetting module registry between tests.

This is a temporary fix to #7240.
It should be reverted as part of #7178.

* Make the hack work in all environments

(cherry picked from commit 15ae5857f6)
This commit is contained in:
Dan Abramov
2016-07-21 14:34:15 -07:00
committed by Paul O’Shannessy
parent 8f8e215df1
commit 7cdcb4f696
6 changed files with 64 additions and 17 deletions
+10
View File
@@ -25,6 +25,16 @@ module.exports = function() {
entries: entries,
debug: config.debug, // sourcemaps
standalone: config.standalone, // global
insertGlobalVars: {
// We can remove this when we remove the few direct
// process.env.NODE_ENV checks against "test".
// The intention is to avoid embedding Browserify's `process` shim
// because we don't really need it.
// See https://github.com/facebook/react/pull/7245 for context.
process: function() {
return 'undefined';
},
},
};
var bundle = browserify(options);
@@ -17,6 +17,21 @@ var ReactPropTypesSecret = require('ReactPropTypesSecret');
var invariant = require('invariant');
var warning = require('warning');
var ReactComponentTreeDevtool;
if (
typeof process !== 'undefined' &&
process.env &&
process.env.NODE_ENV === 'test'
) {
// Temporary hack.
// Inline requires don't work well with Jest:
// https://github.com/facebook/react/issues/7240
// Remove the inline requires when we don't need them anymore:
// https://github.com/facebook/react/pull/7178
ReactComponentTreeDevtool = require('ReactComponentTreeDevtool')
}
var loggedTypeFailures = {};
/**
@@ -73,7 +88,9 @@ function checkReactTypeSpec(typeSpecs, values, location, componentName, element,
var componentStackInfo = '';
if (__DEV__) {
var ReactComponentTreeDevtool = require('ReactComponentTreeDevtool');
if (!ReactComponentTreeDevtool) {
ReactComponentTreeDevtool = require('ReactComponentTreeDevtool');
}
if (debugID !== null) {
componentStackInfo = ReactComponentTreeDevtool.getStackAddendumByID(debugID);
} else if (element !== null) {
@@ -19,11 +19,28 @@ var shouldUpdateReactComponent = require('shouldUpdateReactComponent');
var traverseAllChildren = require('traverseAllChildren');
var warning = require('warning');
var ReactComponentTreeDevtool;
if (
typeof process !== 'undefined' &&
process.env &&
process.env.NODE_ENV === 'test'
) {
// Temporary hack.
// Inline requires don't work well with Jest:
// https://github.com/facebook/react/issues/7240
// Remove the inline requires when we don't need them anymore:
// https://github.com/facebook/react/pull/7178
ReactComponentTreeDevtool = require('ReactComponentTreeDevtool')
}
function instantiateChild(childInstances, child, name, selfDebugID) {
// We found a component instance.
var keyUnique = (childInstances[name] === undefined);
if (__DEV__) {
var ReactComponentTreeDevtool = require('ReactComponentTreeDevtool');
if (!ReactComponentTreeDevtool) {
ReactComponentTreeDevtool = require('ReactComponentTreeDevtool');
}
warning(
keyUnique,
'flattenChildren(...): Encountered two children with the same key, ' +
@@ -278,12 +278,6 @@ function testPropsSequence(sequence) {
describe('ReactMultiChildReconcile', function() {
beforeEach(function() {
jest.resetModuleRegistry();
React = require('React');
ReactDOM = require('ReactDOM');
ReactDOMComponentTree = require('ReactDOMComponentTree');
ReactInstanceMap = require('ReactInstanceMap');
mapObject = require('mapObject');
});
it('should reset internal state if removed then readded', function() {
@@ -116,10 +116,6 @@ var expectClickLogsLengthToBe = function(instance, length) {
describe('reactiverefs', function() {
beforeEach(function() {
jest.resetModuleRegistry();
React = require('React');
ReactTestUtils = require('ReactTestUtils');
reactComponentExpect = require('reactComponentExpect');
});
/**
@@ -163,10 +159,6 @@ describe('reactiverefs', function() {
describe('ref swapping', function() {
beforeEach(function() {
jest.resetModuleRegistry();
React = require('React');
ReactTestUtils = require('ReactTestUtils');
reactComponentExpect = require('reactComponentExpect');
});
var RefHopsAround = React.createClass({
+18 -1
View File
@@ -16,6 +16,21 @@ var KeyEscapeUtils = require('KeyEscapeUtils');
var traverseAllChildren = require('traverseAllChildren');
var warning = require('warning');
var ReactComponentTreeDevtool;
if (
typeof process !== 'undefined' &&
process.env &&
process.env.NODE_ENV === 'test'
) {
// Temporary hack.
// Inline requires don't work well with Jest:
// https://github.com/facebook/react/issues/7240
// Remove the inline requires when we don't need them anymore:
// https://github.com/facebook/react/pull/7178
ReactComponentTreeDevtool = require('ReactComponentTreeDevtool')
}
/**
* @param {function} traverseContext Context passed through traversal.
* @param {?ReactComponent} child React child component.
@@ -33,7 +48,9 @@ function flattenSingleChildIntoContext(
const result = traverseContext;
const keyUnique = (result[name] === undefined);
if (__DEV__) {
var ReactComponentTreeDevtool = require('ReactComponentTreeDevtool');
if (!ReactComponentTreeDevtool) {
ReactComponentTreeDevtool = require('ReactComponentTreeDevtool');
}
warning(
keyUnique,
'flattenChildren(...): Encountered two children with the same key, ' +