From 39475eebf941c2f2caab69c2d0b60a3d0b2a4efb Mon Sep 17 00:00:00 2001 From: raunofreiberg Date: Wed, 21 Mar 2018 12:17:05 +0200 Subject: [PATCH 1/2] tests: add regression test for reading ReactCurrentOwner stateNode --- .../react-dom/src/__tests__/ReactDOM-test.js | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/react-dom/src/__tests__/ReactDOM-test.js b/packages/react-dom/src/__tests__/ReactDOM-test.js index 0ca365afd8a..768f79f2685 100644 --- a/packages/react-dom/src/__tests__/ReactDOM-test.js +++ b/packages/react-dom/src/__tests__/ReactDOM-test.js @@ -377,6 +377,26 @@ describe('ReactDOM', () => { } }); + it('should not throw a TypeError when reading stateNode on ReactCurrentOwner', () => { + class Component extends React.Component { + render() { + return
; + } + } + + const App = () => ReactDOM.findDOMNode(Component); + const container = document.createElement('div'); + const stateNodeErr = new TypeError( + "Cannot read property '_warnedAboutRefsInRender' of null", + ); + + if (__DEV__) { + expect(() => { + ReactDOM.render(, container); + }).not.toThrow(stateNodeErr); + } + }); + it('throws in DEV if jsdom is destroyed by the time setState() is called', () => { class App extends React.Component { state = {x: 1}; From a8d582634d460afb8ebf860cbe905a4626a6f090 Mon Sep 17 00:00:00 2001 From: raunofreiberg Date: Wed, 21 Mar 2018 14:08:29 +0200 Subject: [PATCH 2/2] tests: replace expect with just rendering the component --- .../react-dom/src/__tests__/ReactDOM-test.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/react-dom/src/__tests__/ReactDOM-test.js b/packages/react-dom/src/__tests__/ReactDOM-test.js index 768f79f2685..46b9f5cabe1 100644 --- a/packages/react-dom/src/__tests__/ReactDOM-test.js +++ b/packages/react-dom/src/__tests__/ReactDOM-test.js @@ -377,23 +377,23 @@ describe('ReactDOM', () => { } }); - it('should not throw a TypeError when reading stateNode on ReactCurrentOwner', () => { + it('should not crash calling findDOMNode inside a functional component', () => { + const container = document.createElement('div'); + class Component extends React.Component { render() { return
; } } - const App = () => ReactDOM.findDOMNode(Component); - const container = document.createElement('div'); - const stateNodeErr = new TypeError( - "Cannot read property '_warnedAboutRefsInRender' of null", - ); + const instance = ReactTestUtils.renderIntoDocument(); + const App = () => { + ReactDOM.findDOMNode(instance); + return
; + }; if (__DEV__) { - expect(() => { - ReactDOM.render(, container); - }).not.toThrow(stateNodeErr); + ReactDOM.render(, container); } });