Add a test for nested portals (#8416)
Dan Abramov committed
Nov 24, 2016 at 18:43 UTC
a4dd68fb3d6bae79b555442a3e4c3f3484ccb2bf
2 files changed
+34
scripts/fiber/tests-passing.txt
+1
@@ -490,6 +490,7 @@ src/renderers/dom/fiber/__tests__/ReactDOMFiber-test.js
490
* finds the first child even when fragment is nested
491
* finds the first child even when first child renders null
492
* should render portal children
493
+* should render nested portals
494
* should pass portal context when rendering subtree elsewhere
495
* should update portal context if it changes due to setState
496
* should update portal context if it changes due to re-render
src/renderers/dom/fiber/__tests__/ReactDOMFiber-test.js
+33
@@ -280,6 +280,39 @@ describe('ReactDOMFiber', () => {
280
]);
281
});
282
283
+ it('should render nested portals', () => {
284
+ var portalContainer1 = document.createElement('div');
285
+ var portalContainer2 = document.createElement('div');
286
+ var portalContainer3 = document.createElement('div');
287
+
288
+ ReactDOM.render([
289
+ <div>normal[0]</div>,
290
+ ReactDOM.unstable_createPortal([
291
+ <div>portal1[0]</div>,
292
+ ReactDOM.unstable_createPortal(
293
+ <div>portal2[0]</div>,
294
+ portalContainer2
295
+ ),
296
+ ReactDOM.unstable_createPortal(
297
+ <div>portal3[0]</div>,
298
+ portalContainer3
299
+ ),
300
+ <div>portal1[1]</div>,
301
+ ], portalContainer1),
302
+ <div>normal[1]</div>,
303
+ ], container);
304
+ expect(portalContainer1.innerHTML).toBe('<div>portal1[0]</div><div>portal1[1]</div>');
305
+ expect(portalContainer2.innerHTML).toBe('<div>portal2[0]</div>');
306
+ expect(portalContainer3.innerHTML).toBe('<div>portal3[0]</div>');
307
+ expect(container.innerHTML).toBe('<div>normal[0]</div><div>normal[1]</div>');
308
+
309
+ ReactDOM.unmountComponentAtNode(container);
310
+ expect(portalContainer1.innerHTML).toBe('');
311
+ expect(portalContainer2.innerHTML).toBe('');
312
+ expect(portalContainer3.innerHTML).toBe('');
313
+ expect(container.innerHTML).toBe('');
314
+ });
315
+
316
it('should pass portal context when rendering subtree elsewhere', () => {
317
var portalContainer = document.createElement('div');
318