Skip to content

Commit

Permalink
Eagerly evaluate inline requires in Jest (#7245)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
gaearon committed Jul 16, 2016
1 parent 6c9da39 commit 15ae585
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 17 deletions.
10 changes: 10 additions & 0 deletions grunt/tasks/browserify.js
Expand Up @@ -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);
Expand Down
19 changes: 18 additions & 1 deletion src/isomorphic/classic/types/checkReactTypeSpec.js
Expand Up @@ -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 = {};

/**
Expand Down Expand Up @@ -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) {
Expand Down
19 changes: 18 additions & 1 deletion src/renderers/shared/stack/reconciler/ReactChildReconciler.js
Expand Up @@ -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, ' +
Expand Down
Expand Up @@ -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() {
Expand Down
8 changes: 0 additions & 8 deletions src/renderers/shared/stack/reconciler/__tests__/refs-test.js
Expand Up @@ -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');
});

/**
Expand Down Expand Up @@ -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({
Expand Down
19 changes: 18 additions & 1 deletion src/shared/utils/flattenChildren.js
Expand Up @@ -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.
Expand All @@ -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, ' +
Expand Down

0 comments on commit 15ae585

Please sign in to comment.