Skip to content

Commit

Permalink
[New] shallow: isEmptyRender: allow on multiple elements
Browse files Browse the repository at this point in the history
  • Loading branch information
ljharb committed Dec 13, 2018
1 parent eb745b7 commit d1bbec5
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 1 deletion.
103 changes: 103 additions & 0 deletions packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2911,6 +2911,109 @@ describe('shallow', () => {
expect(wrapper.isEmptyRender()).to.equal(data.expectResponse);
});

describe('nested nodes', () => {
class RenderChildren extends React.Component {
render() {
return this.props.children;
}
}

class RenderNull extends React.Component {
render() {
return null;
}
}

it('returns false for nested elements that return null', () => {
const wrapper = shallow((
<RenderChildren>
<RenderNull />
</RenderChildren>
));

expect(wrapper.isEmptyRender()).to.equal(false);
});

it('returns false for multiple nested elements that all return null', () => {
const wrapper = shallow((
<RenderChildren>
<div />
</RenderChildren>
));

expect(wrapper.isEmptyRender()).to.equal(false);
});

it('returns false for multiple nested elements where one fringe returns a non null value', () => {
const wrapper = shallow((
<RenderChildren>
<div>Hello</div>
</RenderChildren>
));

expect(wrapper.isEmptyRender()).to.equal(false);
});

itIf(is('>= 16'), 'returns false for multiple nested elements that all return null', () => {
const wrapper = mount((
<RenderChildren>
<RenderNull />
<RenderChildren>
<RenderNull />
<div />
</RenderChildren>
</RenderChildren>
));

expect(wrapper.isEmptyRender()).to.equal(false);
});

itIf(is('>= 16'), 'returns false for multiple nested elements where one fringe returns a non null value', () => {
const wrapper = shallow((
<RenderChildren>
<RenderNull />
<RenderChildren>
<RenderNull />
<RenderNull />
</RenderChildren>
<RenderChildren>
<RenderNull />
<RenderChildren>
<RenderNull />
<RenderNull />
<RenderNull />
<div>Hello</div>
</RenderChildren>
</RenderChildren>
</RenderChildren>
));

expect(wrapper.isEmptyRender()).to.equal(false);
});

itIf(is('>= 16'), 'returns false for multiple nested elements where all values are null', () => {
const wrapper = shallow((
<RenderChildren>
<RenderNull />
<RenderChildren>
<RenderNull />
<RenderNull />
</RenderChildren>
<RenderChildren>
<RenderNull />
<RenderChildren>
<RenderNull />
<RenderNull />
<RenderNull />
</RenderChildren>
</RenderChildren>
</RenderChildren>
));

expect(wrapper.isEmptyRender()).to.equal(false);
});
});

it('does not return true for HTML elements', () => {
const wrapper = shallow(<div className="bar baz" />);
expect(wrapper.isEmptyRender()).to.equal(false);
Expand Down
5 changes: 4 additions & 1 deletion packages/enzyme/src/ShallowWrapper.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import {
cloneElement,
spyMethod,
shallowEqual,
isEmptyValue,
} from './Utils';
import getAdapter from './getAdapter';
import { debugNodes } from './Debug';
Expand Down Expand Up @@ -766,7 +767,9 @@ class ShallowWrapper {
* @returns {boolean}
*/
isEmptyRender() {
return this.type() === null;
const nodes = this.getNodesInternal();

return nodes.every(n => isEmptyValue(n));
}

/**
Expand Down

0 comments on commit d1bbec5

Please sign in to comment.