From fc39793f1c5ed7b9597214420fe312984c59eedf Mon Sep 17 00:00:00 2001 From: Sebastian Silbermann Date: Tue, 12 Mar 2019 12:37:46 +0100 Subject: [PATCH 1/3] [ReactDOM] Add strict mode test for findDOMNode --- .../src/__tests__/findDOMNode-test.js | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/packages/react-dom/src/__tests__/findDOMNode-test.js b/packages/react-dom/src/__tests__/findDOMNode-test.js index 9aaa65088e6..5502a899fd8 100644 --- a/packages/react-dom/src/__tests__/findDOMNode-test.js +++ b/packages/react-dom/src/__tests__/findDOMNode-test.js @@ -157,4 +157,34 @@ describe('findDOMNode', () => { ]); expect(match).toBe(child); }); + + it('findDOMNode should not warn if passed a host component inside StrictMode', () => { + let child = undefined; + + class IsInStrictMode extends React.Component { + render() { + const {as: Component} = this.props; + return (child = n)} />; + } + } + + ReactTestUtils.renderIntoDocument( + + + , + ); + + expect(() => ReactDOM.findDOMNode(child)).not.toWarnDev([ + 'Warning: findDOMNode is deprecated in StrictMode. ' + + 'findDOMNode was passed an instance of span which is inside StrictMode. ' + + 'Instead, add a ref directly to the element you want to reference.' + + '\n' + + '\n in span (at **)' + + '\n in IsInStrictMode (at **)' + + '\n in StrictMode (at **)' + + '\n' + + '\nLearn more about using refs safely here:' + + '\nhttps://fb.me/react-strict-mode-find-node', + ]); + }); }); From 2d8e60f97470dc44a7030b217d5a840cd0b195d5 Mon Sep 17 00:00:00 2001 From: Sebastian Silbermann Date: Tue, 12 Mar 2019 12:38:39 +0100 Subject: [PATCH 2/3] Broaden error message Unsure if we won't get false positves if the error message changes slightly --- .../react-dom/src/__tests__/findDOMNode-test.js | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/packages/react-dom/src/__tests__/findDOMNode-test.js b/packages/react-dom/src/__tests__/findDOMNode-test.js index 5502a899fd8..ef948d6470e 100644 --- a/packages/react-dom/src/__tests__/findDOMNode-test.js +++ b/packages/react-dom/src/__tests__/findDOMNode-test.js @@ -174,17 +174,6 @@ describe('findDOMNode', () => { , ); - expect(() => ReactDOM.findDOMNode(child)).not.toWarnDev([ - 'Warning: findDOMNode is deprecated in StrictMode. ' + - 'findDOMNode was passed an instance of span which is inside StrictMode. ' + - 'Instead, add a ref directly to the element you want to reference.' + - '\n' + - '\n in span (at **)' + - '\n in IsInStrictMode (at **)' + - '\n in StrictMode (at **)' + - '\n' + - '\nLearn more about using refs safely here:' + - '\nhttps://fb.me/react-strict-mode-find-node', - ]); + expect(() => ReactDOM.findDOMNode(child)).not.toWarnDev(['**']); }); }); From 246962830d510d58c0af06d3e113ad1dd4ce074d Mon Sep 17 00:00:00 2001 From: Sebastian Silbermann Date: Tue, 12 Mar 2019 13:14:29 +0100 Subject: [PATCH 3/3] Don't expect outside of dev --- packages/react-dom/src/__tests__/findDOMNode-test.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/react-dom/src/__tests__/findDOMNode-test.js b/packages/react-dom/src/__tests__/findDOMNode-test.js index ef948d6470e..2f152593af6 100644 --- a/packages/react-dom/src/__tests__/findDOMNode-test.js +++ b/packages/react-dom/src/__tests__/findDOMNode-test.js @@ -174,6 +174,9 @@ describe('findDOMNode', () => { , ); - expect(() => ReactDOM.findDOMNode(child)).not.toWarnDev(['**']); + // outside of dev toWarnDev would always pass which means negating it would always fail + if (__DEV__) { + expect(() => ReactDOM.findDOMNode(child)).not.toWarnDev(['**']); + } }); });