From 49617c3be7ba9e4bfeaabebee6a42673c623f5ab Mon Sep 17 00:00:00 2001 From: Scott Feeney Date: Tue, 1 Dec 2015 19:49:15 -0800 Subject: [PATCH] Merge pull request #5561 from graue/setstate-cwm shallow render: fix setState in componentWillMount (cherry picked from commit 8557cc0d676f81670079e2b81a9fb461fd280141) --- src/test/ReactTestUtils.js | 10 +++++++--- src/test/__tests__/ReactTestUtils-test.js | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/test/ReactTestUtils.js b/src/test/ReactTestUtils.js index cb41c5a22a..78e44185ca 100644 --- a/src/test/ReactTestUtils.js +++ b/src/test/ReactTestUtils.js @@ -423,11 +423,15 @@ ReactShallowRenderer.prototype.render = function(element, context) { if (!context) { context = emptyObject; } - var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(false); - this._render(element, transaction, context); - ReactUpdates.ReactReconcileTransaction.release(transaction); + ReactUpdates.batchedUpdates(_batchedRender, this, element, context); }; +function _batchedRender(renderer, element, context) { + var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(false); + renderer._render(element, transaction, context); + ReactUpdates.ReactReconcileTransaction.release(transaction); +} + ReactShallowRenderer.prototype.unmount = function() { if (this._instance) { this._instance.unmountComponent(); diff --git a/src/test/__tests__/ReactTestUtils-test.js b/src/test/__tests__/ReactTestUtils-test.js index 15a8d499d9..fa4ce9080b 100644 --- a/src/test/__tests__/ReactTestUtils-test.js +++ b/src/test/__tests__/ReactTestUtils-test.js @@ -201,6 +201,21 @@ describe('ReactTestUtils', function() { expect(result.props.className).toEqual('clicked'); }); + it('can setState in componentWillMount when shallow rendering', function() { + var SimpleComponent = React.createClass({ + componentWillMount() { + this.setState({groovy: 'doovy'}); + }, + render() { + return
{this.state.groovy}
; + }, + }); + + var shallowRenderer = ReactTestUtils.createRenderer(); + var result = shallowRenderer.render(); + expect(result).toEqual(
doovy
); + }); + it('can pass context when shallowly rendering', function() { var SimpleComponent = React.createClass({ contextTypes: {