diff --git a/src/test/ReactDefaultPerfAnalysis.js b/src/test/ReactDefaultPerfAnalysis.js index bf7cb30feca6b..bb5a35e2d0eee 100644 --- a/src/test/ReactDefaultPerfAnalysis.js +++ b/src/test/ReactDefaultPerfAnalysis.js @@ -175,12 +175,13 @@ function getUnchangedComponents(measurement) { // the amount of time it took to render the entire subtree. var cleanComponents = {}; var writes = measurement.writes; + var hierarchy = measurement.hierarchy; var dirtyComposites = {}; Object.keys(writes).forEach(function(id) { writes[id].forEach(function(write) { // Root mounting (innerHTML set) is recorded with an ID of '' - if (id !== '') { - measurement.hierarchy[id].forEach((c) => dirtyComposites[c] = true); + if (id !== '' && hierarchy.hasOwnProperty(id)) { + hierarchy[id].forEach((c) => dirtyComposites[c] = true); } }); }); diff --git a/src/test/__tests__/ReactDefaultPerf-test.js b/src/test/__tests__/ReactDefaultPerf-test.js index cc16c8846215c..8019f0fe8e55a 100644 --- a/src/test/__tests__/ReactDefaultPerf-test.js +++ b/src/test/__tests__/ReactDefaultPerf-test.js @@ -239,6 +239,18 @@ describe('ReactDefaultPerf', function() { expect(summary).toEqual([]); }); + it('should not fail on input change events', function() { + var container = document.createElement('div'); + var onChange = () => {}; + var input = ReactDOM.render( + , + container + ); + expectNoWaste(() => { + ReactTestUtils.Simulate.change(input); + }); + }); + it('should print a table after calling printOperations', function() { var container = document.createElement('div'); var measurements = measure(() => {