File tree Expand file tree Collapse file tree 1 file changed +51
-0
lines changed
packages/vue/__tests__/e2e Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Original file line number Diff line number Diff line change @@ -645,4 +645,55 @@ describe('e2e: TransitionGroup', () => {
645
645
} ,
646
646
E2E_TIMEOUT ,
647
647
)
648
+
649
+ test (
650
+ 'not leaking after children unmounted' ,
651
+ async ( ) => {
652
+ const client = await page ( ) . createCDPSession ( )
653
+ await page ( ) . evaluate ( async ( ) => {
654
+ const { createApp, ref, nextTick } = ( window as any ) . Vue
655
+ const show = ref ( true )
656
+
657
+ createApp ( {
658
+ components : {
659
+ Child : {
660
+ setup : ( ) => {
661
+ // Big arrays kick GC earlier
662
+ const test = ref ( [ ...Array ( 3000 ) ] . map ( ( _ , i ) => ( { i } ) ) )
663
+ // @ts -expect-error - Custom property and same lib as runtime is used
664
+ window . __REF__ = new WeakRef ( test )
665
+
666
+ return { test }
667
+ } ,
668
+ template : `
669
+ <p>{{ test.length }}</p>
670
+ ` ,
671
+ } ,
672
+ } ,
673
+ template : `
674
+ <transition-group>
675
+ <Child v-if="show" />
676
+ </transition-group>
677
+ ` ,
678
+ setup ( ) {
679
+ return { show }
680
+ } ,
681
+ } ) . mount ( '#app' )
682
+
683
+ show . value = false
684
+ await nextTick ( )
685
+ } )
686
+
687
+ const isCollected = async ( ) =>
688
+ // @ts -expect-error - Custom property
689
+ await page ( ) . evaluate ( ( ) => window . __REF__ . deref ( ) === undefined )
690
+
691
+ while ( ( await isCollected ( ) ) === false ) {
692
+ await client . send ( 'HeapProfiler.collectGarbage' )
693
+ }
694
+
695
+ expect ( await isCollected ( ) ) . toBe ( true )
696
+ } ,
697
+ E2E_TIMEOUT ,
698
+ )
648
699
} )
You can’t perform that action at this time.
0 commit comments