From 09e3a633d7f7a0fded674852ea0471072b482139 Mon Sep 17 00:00:00 2001 From: Michal Matyas Date: Fri, 3 Nov 2017 09:02:50 +0100 Subject: [PATCH 1/2] Fix ReactShallowRenderer not rerendering when calling forceUpdate() --- .../src/ReactShallowRenderer.js | 6 ++++-- .../src/__tests__/ReactShallowRenderer-test.js | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/react-test-renderer/src/ReactShallowRenderer.js b/packages/react-test-renderer/src/ReactShallowRenderer.js index 956005da561ad..31338b116d7a2 100644 --- a/packages/react-test-renderer/src/ReactShallowRenderer.js +++ b/packages/react-test-renderer/src/ReactShallowRenderer.js @@ -147,9 +147,11 @@ class ReactShallowRenderer { // Fallback to previous instance state to support rendering React.cloneElement() const state = this._newState || this._instance.state || emptyObject; - if (typeof this._instance.shouldComponentUpdate === 'function') { + if ( + typeof this._instance.shouldComponentUpdate === 'function' && + this._forcedUpdate !== true + ) { if ( - this._forcedUpdate || this._instance.shouldComponentUpdate(props, state, context) === false ) { this._instance.context = context; diff --git a/packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js b/packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js index 55647fbaaf342..1f51e390040b6 100644 --- a/packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js +++ b/packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js @@ -142,6 +142,24 @@ describe('ReactShallowRenderer', () => { expect(scuCounter).toEqual(0); }); + it('should rerender when calling forceUpdate', () => { + let renderCounter = 0; + class SimpleComponent extends React.Component { + render() { + renderCounter += 1; + return
; + } + } + + const shallowRenderer = createRenderer(); + shallowRenderer.render(); + expect(renderCounter).toEqual(1); + + const instance = shallowRenderer.getMountedInstance(); + instance.forceUpdate(); + expect(renderCounter).toEqual(2); + }); + it('should shallow render a functional component', () => { function SomeComponent(props, context) { return ( From 4207883a056ef6ae512463e1c2203c31fed98b04 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Fri, 3 Nov 2017 10:40:30 +0000 Subject: [PATCH 2/2] Style nit --- packages/react-test-renderer/src/ReactShallowRenderer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-test-renderer/src/ReactShallowRenderer.js b/packages/react-test-renderer/src/ReactShallowRenderer.js index 31338b116d7a2..fc3baf251f029 100644 --- a/packages/react-test-renderer/src/ReactShallowRenderer.js +++ b/packages/react-test-renderer/src/ReactShallowRenderer.js @@ -149,7 +149,7 @@ class ReactShallowRenderer { if ( typeof this._instance.shouldComponentUpdate === 'function' && - this._forcedUpdate !== true + !this._forcedUpdate ) { if ( this._instance.shouldComponentUpdate(props, state, context) === false