Make scry* look through stateless components

Fixes #4882.
This commit is contained in:
Ben Alpert
2015-09-30 16:00:21 -07:00
parent c512603a8c
commit 7bd51659d6
2 changed files with 25 additions and 2 deletions
+7 -2
View File
@@ -44,6 +44,7 @@ function findAllInRenderedTreeInternal(inst, test) {
}
var publicInst = inst.getPublicInstance();
var ret = test(publicInst) ? [publicInst] : [];
var currentElement = inst._currentElement;
if (ReactTestUtils.isDOMComponent(publicInst)) {
var renderedChildren = inst._renderedChildren;
var key;
@@ -58,7 +59,10 @@ function findAllInRenderedTreeInternal(inst, test) {
)
);
}
} else if (ReactTestUtils.isCompositeComponent(publicInst)) {
} else if (
ReactElement.isValidElement(currentElement) &&
typeof currentElement.type === 'function'
) {
ret = ret.concat(
findAllInRenderedTreeInternal(inst._renderedComponent, test)
);
@@ -111,7 +115,8 @@ var ReactTestUtils = {
// this returns when we have DOM nodes as refs directly
return false;
}
return typeof inst.render === 'function' &&
return inst != null &&
typeof inst.render === 'function' &&
typeof inst.setState === 'function';
},
+18
View File
@@ -410,4 +410,22 @@ describe('ReactTestUtils', function() {
expect(handler).toHaveBeenCalledWith(jasmine.objectContaining({target: node}));
});
it('can scry with stateless components involved', function() {
var Stateless = () => <div><hr /></div>;
var SomeComponent = React.createClass({
render: function() {
return (
<div>
<Stateless />
<hr />
</div>
);
},
});
var inst = ReactTestUtils.renderIntoDocument(<SomeComponent />);
var hrs = ReactTestUtils.scryRenderedDOMComponentsWithTag(inst, 'hr');
expect(hrs.length).toBe(2);
});
});