diff --git a/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx b/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx
index cc3c97d23..d029e0083 100644
--- a/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx
+++ b/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx
@@ -5399,6 +5399,27 @@ describeWithDOM('mount', () => {
);
+ class ClassChild extends React.Component {
+ render() {
+ return
Class child
;
+ }
+ }
+
+ function SFCChild() {
+ return SFC child
;
+ }
+
+ class FragmentWithCustomChildClass extends React.Component {
+ render() {
+ return (
+
+
+
+
+ );
+ }
+ }
+
it('correctly renders html for both children for class', () => {
const classWrapper = mount();
expect(classWrapper.html()).to.equal('Foo
Bar
');
@@ -5408,6 +5429,11 @@ describeWithDOM('mount', () => {
const constWrapper = mount();
expect(constWrapper.html()).to.equal('Foo
Bar
');
});
+
+ it('correctly renders html for custom component children', () => {
+ const withChildrenWrapper = mount();
+ expect(withChildrenWrapper.html()).to.equal('Class child
SFC child
');
+ });
});
});
diff --git a/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx
index b20b598f0..245aa41f0 100644
--- a/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx
+++ b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx
@@ -5487,6 +5487,27 @@ describe('shallow', () => {
);
+ class ClassChild extends React.Component {
+ render() {
+ return Class child
;
+ }
+ }
+
+ function SFCChild() {
+ return SFC child
;
+ }
+
+ class FragmentWithCustomChildClass extends React.Component {
+ render() {
+ return (
+
+
+
+
+ );
+ }
+ }
+
it('correctly renders html for both children for class', () => {
const classWrapper = shallow();
expect(classWrapper.html()).to.equal('Foo
Bar
');
@@ -5496,6 +5517,11 @@ describe('shallow', () => {
const constWrapper = shallow();
expect(constWrapper.html()).to.equal('Foo
Bar
');
});
+
+ it('correctly renders html for custom component children', () => {
+ const withChildrenWrapper = shallow();
+ expect(withChildrenWrapper.html()).to.equal('Class child
SFC child
');
+ });
});
});
diff --git a/packages/enzyme/src/RSTTraversal.js b/packages/enzyme/src/RSTTraversal.js
index 7d5597fd5..52c1f29e9 100644
--- a/packages/enzyme/src/RSTTraversal.js
+++ b/packages/enzyme/src/RSTTraversal.js
@@ -142,6 +142,7 @@ function getTextFromRSTNode(node, {
getCustom,
handleHostNodes,
recurse,
+ nullRenderReturnsNull = false,
}) {
if (node == null) {
return '';
@@ -158,6 +159,9 @@ function getTextFromRSTNode(node, {
if (handleHostNodes && node.nodeType === 'host') {
return handleHostNodes(node);
}
+ if (node.rendered == null && nullRenderReturnsNull) {
+ return null;
+ }
return childrenOfNode(node).map(recurse).join('');
}
@@ -190,13 +194,14 @@ function getHTMLFromHostNode(hostNode) {
}
export function getHTMLFromHostNodes(node, adapter) {
- if (node === null) return null;
-
- const hostNode = adapter.nodeToHostNode(node, true);
- if (hostNode === null) return null;
-
- const nodeArray = Array.isArray(hostNode) ? hostNode : [hostNode];
- const nodesHTML = nodeArray.map(item => getHTMLFromHostNode(item));
-
- return nodesHTML.join('');
+ return getTextFromRSTNode(node, {
+ recurse(item) {
+ return getHTMLFromHostNodes(item, adapter);
+ },
+ handleHostNodes(item) {
+ const nodes = [].concat(adapter.nodeToHostNode(item, true));
+ return nodes.map(getHTMLFromHostNode).join('');
+ },
+ nullRenderReturnsNull: true,
+ });
}