Make scry* look through stateless components
Fixes #4882.
Ben Alpert committed
Sep 30, 2015 at 16:00 UTC
7bd51659d672c29f355f2c2f4e38d34fb450ca3a
2 files changed
+25
-2
src/test/ReactTestUtils.js
+7
-2
@@ -44,6 +44,7 @@ function findAllInRenderedTreeInternal(inst, test) {
44
}
45
var publicInst = inst.getPublicInstance();
46
var ret = test(publicInst) ? [publicInst] : [];
47
+ var currentElement = inst._currentElement;
48
if (ReactTestUtils.isDOMComponent(publicInst)) {
49
var renderedChildren = inst._renderedChildren;
50
var key;
@@ -58,7 +59,10 @@ function findAllInRenderedTreeInternal(inst, test) {
59
)
60
);
61
}
61
- } else if (ReactTestUtils.isCompositeComponent(publicInst)) {
62
+ } else if (
63
+ ReactElement.isValidElement(currentElement) &&
64
+ typeof currentElement.type === 'function'
65
+ ) {
66
ret = ret.concat(
67
findAllInRenderedTreeInternal(inst._renderedComponent, test)
68
);
@@ -111,7 +115,8 @@ var ReactTestUtils = {
115
// this returns when we have DOM nodes as refs directly
116
return false;
117
}
114
- return typeof inst.render === 'function' &&
118
+ return inst != null &&
119
+ typeof inst.render === 'function' &&
120
typeof inst.setState === 'function';
121
},
122
src/test/__tests__/ReactTestUtils-test.js
+18
@@ -410,4 +410,22 @@ describe('ReactTestUtils', function() {
410
expect(handler).toHaveBeenCalledWith(jasmine.objectContaining({target: node}));
411
});
412
413
+ it('can scry with stateless components involved', function() {
414
+ var Stateless = () => <div><hr /></div>;
415
+ var SomeComponent = React.createClass({
416
+ render: function() {
417
+ return (
418
+ <div>
419
+ <Stateless />
420
+ <hr />
421
+ </div>
422
+ );
423
+ },
424
+ });
425
+
426
+ var inst = ReactTestUtils.renderIntoDocument(<SomeComponent />);
427
+ var hrs = ReactTestUtils.scryRenderedDOMComponentsWithTag(inst, 'hr');
428
+ expect(hrs.length).toBe(2);
429
+ });
430
+
431
});