@samitouri / QOS-React-2 / commits / 7bd51659d6

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 });