Add a test for nested portals (#8416)

This commit is contained in:
Dan Abramov
2016-11-24 18:43:45 +00:00
committed by GitHub
parent 0ba8434a33
commit a4dd68fb3d
2 changed files with 34 additions and 0 deletions
+1
View File
@@ -490,6 +490,7 @@ src/renderers/dom/fiber/__tests__/ReactDOMFiber-test.js
* finds the first child even when fragment is nested
* finds the first child even when first child renders null
* should render portal children
* should render nested portals
* should pass portal context when rendering subtree elsewhere
* should update portal context if it changes due to setState
* should update portal context if it changes due to re-render
@@ -280,6 +280,39 @@ describe('ReactDOMFiber', () => {
]);
});
it('should render nested portals', () => {
var portalContainer1 = document.createElement('div');
var portalContainer2 = document.createElement('div');
var portalContainer3 = document.createElement('div');
ReactDOM.render([
<div>normal[0]</div>,
ReactDOM.unstable_createPortal([
<div>portal1[0]</div>,
ReactDOM.unstable_createPortal(
<div>portal2[0]</div>,
portalContainer2
),
ReactDOM.unstable_createPortal(
<div>portal3[0]</div>,
portalContainer3
),
<div>portal1[1]</div>,
], portalContainer1),
<div>normal[1]</div>,
], container);
expect(portalContainer1.innerHTML).toBe('<div>portal1[0]</div><div>portal1[1]</div>');
expect(portalContainer2.innerHTML).toBe('<div>portal2[0]</div>');
expect(portalContainer3.innerHTML).toBe('<div>portal3[0]</div>');
expect(container.innerHTML).toBe('<div>normal[0]</div><div>normal[1]</div>');
ReactDOM.unmountComponentAtNode(container);
expect(portalContainer1.innerHTML).toBe('');
expect(portalContainer2.innerHTML).toBe('');
expect(portalContainer3.innerHTML).toBe('');
expect(container.innerHTML).toBe('');
});
it('should pass portal context when rendering subtree elsewhere', () => {
var portalContainer = document.createElement('div');