Skip to content

Commit 963ed6b

Browse files
author
Brian Vaughn
committed
Revert "Improved handling for mixed children case"
This reverts commit c0d103c.
1 parent 807e623 commit 963ed6b

File tree

4 files changed

+13
-59
lines changed

4 files changed

+13
-59
lines changed

packages/react-test-renderer/src/ReactTestHostConfig.js

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,6 @@ export function removeChild(
8686
parentInstance: Instance | Container,
8787
child: Instance | TextInstance,
8888
): void {
89-
// Detect and ignore ReactDOM.createPortal() usage.
90-
// Test renderer's toJSON() method knows how to handle this case.
91-
if (parentInstance instanceof HTMLElement) {
92-
return;
93-
}
9489
const index = parentInstance.children.indexOf(child);
9590
parentInstance.children.splice(index, 1);
9691
}

packages/react-test-renderer/src/ReactTestRenderer.js

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -73,18 +73,14 @@ function toJSON(inst: Instance | TextInstance): ReactTestRendererNode {
7373
const {children, ...props} = inst.props;
7474
/* eslint-enable */
7575
let renderedChildren = null;
76-
if (inst.props != null && inst.props.children != null) {
77-
// At least some of this element's children are from another renderer
78-
// (e.g. ReactDOM.createPortal)
79-
// In this case, treat all children as potentially from the other renderer.
80-
// If we don't, the JSON representation may contain overlaps.
76+
if (inst.children && inst.children.length) {
77+
renderedChildren = inst.children.map(toJSON);
78+
} else if (inst.props != null && inst.props.children != null) {
79+
// The element's children are from another renderer (e.g. ReactDOM.createPortal)
8180
renderedChildren = React.Children.toArray(inst.props.children).map(
8281
reactElementToJSON,
8382
);
84-
} else if (inst.children && inst.children.length) {
85-
renderedChildren = inst.children.map(toJSON);
8683
}
87-
8884
const json: ReactTestRendererJSON = {
8985
type: inst.type,
9086
props: props,
@@ -101,14 +97,10 @@ function toJSON(inst: Instance | TextInstance): ReactTestRendererNode {
10197

10298
function reactElementToJSON(inst: any): ReactTestRendererNode {
10399
if (typeof inst === 'object') {
104-
/* eslint-disable no-unused-vars */
105-
// We don't include the `children` prop in JSON.
106-
// Instead, we will include the actual rendered children.
107-
const {children, ...props} = inst.props != null ? inst.props : {};
108100
const type = typeOf(inst);
109101
return {
110102
type: type == null ? 'unknown' : type.toString(),
111-
props,
103+
props: inst.props || {},
112104
children: React.Children.toArray(
113105
inst.children || inst.props.children,
114106
).map(reactElementToJSON),

packages/react-test-renderer/src/__tests__/ReactTestRenderer-test.js

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,10 @@ jest.resetModules();
1717
const ReactTestRenderer = require('react-test-renderer');
1818

1919
describe('ReactTestRenderer', () => {
20-
it('should support ReactDOM portal usage', () => {
20+
it('should support ReactDOM portal', () => {
2121
const container = document.createElement('div');
22-
let rendered = ReactTestRenderer.create(
23-
<div>
24-
{ReactDOM.createPortal(<span>Rendered by ReactDOM</span>, container)}
25-
</div>,
26-
);
27-
expect(rendered.toJSON()).toMatchSnapshot();
28-
29-
rendered.update(
30-
<div>
31-
<span>Rendered by ReactTestRenderer</span>
32-
{ReactDOM.createPortal(<span>Rendered by ReactDOM</span>, container)}
33-
</div>,
22+
const rendered = ReactTestRenderer.create(
23+
<div>{ReactDOM.createPortal(<span>Hi!</span>, container)}</div>,
3424
);
3525
expect(rendered.toJSON()).toMatchSnapshot();
3626
});

packages/react-test-renderer/src/__tests__/__snapshots__/ReactTestRenderer-test.js.snap

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,16 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3-
exports[`ReactTestRenderer should support ReactDOM portal usage 1`] = `
3+
exports[`ReactTestRenderer should support ReactDOM portal 1`] = `
44
<div>
55
Object {
66
"children": Array [
77
Object {
88
"children": Array [
9-
"Rendered by ReactDOM",
9+
"Hi!",
1010
],
11-
"props": Object {},
12-
"type": "Symbol(react.element)",
13-
},
14-
],
15-
"props": Object {},
16-
"type": "Symbol(react.portal)",
17-
}
18-
</div>
19-
`;
20-
21-
exports[`ReactTestRenderer should support ReactDOM portal usage 2`] = `
22-
<div>
23-
Object {
24-
"children": Array [
25-
"Rendered by ReactTestRenderer",
26-
],
27-
"props": Object {},
28-
"type": "Symbol(react.element)",
29-
}
30-
Object {
31-
"children": Array [
32-
Object {
33-
"children": Array [
34-
"Rendered by ReactDOM",
35-
],
36-
"props": Object {},
11+
"props": Object {
12+
"children": "Hi!",
13+
},
3714
"type": "Symbol(react.element)",
3815
},
3916
],

0 commit comments

Comments
 (0)