Shallow render components that define contextTypes
You now no longer have to pass an undocumented extra argument to the shallow renderer for rendering components with contextTypes to work. Fixes #3696
Scott Feeney committed
Apr 21, 2015 at 16:17 UTC
df937af91c3fe1f72edb175c1f69a69b5b02a145
2 files changed
+25
-5
src/test/ReactTestUtils.js
+4
@@ -26,6 +26,7 @@ var ReactUpdates = require('ReactUpdates');
26
var SyntheticEvent = require('SyntheticEvent');
27
28
var assign = require('Object.assign');
29
+var emptyObject = require('emptyObject');
30
var findDOMNode = require('findDOMNode');
31
32
var topLevelTypes = EventConstants.topLevelTypes;
@@ -369,6 +370,9 @@ assign(
370
);
371
372
ReactShallowRenderer.prototype.render = function(element, context) {
373
+ if (!context) {
374
+ context = emptyObject;
375
+ }
376
var transaction = ReactUpdates.ReactReconcileTransaction.getPooled();
377
this._render(element, transaction, context);
378
ReactUpdates.ReactReconcileTransaction.release(transaction);
src/test/__tests__/ReactTestUtils-test.js
+21
-5
@@ -46,7 +46,7 @@ describe('ReactTestUtils', function() {
46
});
47
48
var shallowRenderer = ReactTestUtils.createRenderer();
49
- shallowRenderer.render(<SomeComponent />, {});
49
+ shallowRenderer.render(<SomeComponent />);
50
51
var result = shallowRenderer.getRenderOutput();
52
@@ -68,7 +68,7 @@ describe('ReactTestUtils', function() {
68
});
69
70
var shallowRenderer = ReactTestUtils.createRenderer();
71
- shallowRenderer.render(<SomeComponent />, {});
71
+ shallowRenderer.render(<SomeComponent />);
72
shallowRenderer.unmount();
73
74
expect(componentWillUnmount).toBeCalled();
@@ -82,7 +82,7 @@ describe('ReactTestUtils', function() {
82
});
83
84
var shallowRenderer = ReactTestUtils.createRenderer();
85
- shallowRenderer.render(<SomeComponent />, {});
85
+ shallowRenderer.render(<SomeComponent />);
86
87
var result = shallowRenderer.getRenderOutput();
88
@@ -123,7 +123,7 @@ describe('ReactTestUtils', function() {
123
});
124
125
var shallowRenderer = ReactTestUtils.createRenderer();
126
- shallowRenderer.render(<SomeComponent />, {});
126
+ shallowRenderer.render(<SomeComponent />);
127
var result = shallowRenderer.getRenderOutput();
128
expect(result.type).toBe('div');
129
expect(result.props.children).toEqual([
@@ -131,7 +131,7 @@ describe('ReactTestUtils', function() {
131
<span className="child2" />
132
]);
133
134
- shallowRenderer.render(<SomeComponent aNew="prop" />, {});
134
+ shallowRenderer.render(<SomeComponent aNew="prop" />);
135
var updatedResult = shallowRenderer.getRenderOutput();
136
expect(updatedResult.type).toBe('a');
137
@@ -143,6 +143,22 @@ describe('ReactTestUtils', function() {
143
expect(updatedResultCausedByClick.props.className).toBe('was-clicked');
144
});
145
146
+ it('can shallowly render components with contextTypes', function() {
147
+ var SimpleComponent = React.createClass({
148
+ contextTypes: {
149
+ name: React.PropTypes.string,
150
+ },
151
+ render: function() {
152
+ return <div />;
153
+ },
154
+ });
155
+
156
+ var shallowRenderer = ReactTestUtils.createRenderer();
157
+ shallowRenderer.render(<SimpleComponent />);
158
+ var result = shallowRenderer.getRenderOutput();
159
+ expect(result).toEqual(<div />);
160
+ });
161
+
162
it('Test scryRenderedDOMComponentsWithClass with TextComponent', function() {
163
var renderedComponent = ReactTestUtils.renderIntoDocument(<div>Hello <span>Jim</span></div>);
164
var scryResults = ReactTestUtils.scryRenderedDOMComponentsWithClass(