@@ -10,6 +10,7 @@ import {
10
10
markRaw ,
11
11
nextTick ,
12
12
nodeOps ,
13
+ onMounted ,
13
14
h as originalH ,
14
15
ref ,
15
16
render ,
@@ -18,6 +19,10 @@ import {
18
19
} from '@vue/runtime-test'
19
20
import { Fragment , createCommentVNode , createVNode } from '../../src/vnode'
20
21
import { compile , createApp as createDOMApp , render as domRender } from 'vue'
22
+ import type { HMRRuntime } from '../../src/hmr'
23
+
24
+ declare var __VUE_HMR_RUNTIME__ : HMRRuntime
25
+ const { rerender, createRecord } = __VUE_HMR_RUNTIME__
21
26
22
27
describe ( 'renderer: teleport' , ( ) => {
23
28
describe ( 'eager mode' , ( ) => {
@@ -741,4 +746,56 @@ describe('renderer: teleport', () => {
741
746
expect ( tRefInMounted ) . toBe ( target . children [ 1 ] )
742
747
} )
743
748
}
749
+
750
+ test ( 'handle update and hmr rerender' , async ( ) => {
751
+ const target = document . createElement ( 'div' )
752
+ const root = document . createElement ( 'div' )
753
+
754
+ const Comp = {
755
+ setup ( ) {
756
+ const cls = ref ( 'foo' )
757
+ onMounted ( ( ) => {
758
+ // trigger update
759
+ cls . value = 'bar'
760
+ } )
761
+ return { cls, target }
762
+ } ,
763
+ template : `
764
+ <Teleport :to="target">
765
+ <div :class="cls">
766
+ <div>
767
+ <slot></slot>
768
+ </div>
769
+ </div>
770
+ </Teleport>
771
+ ` ,
772
+ }
773
+
774
+ const appId = 'test-app-id'
775
+ const App = {
776
+ __hmrId : appId ,
777
+ components : { Comp } ,
778
+ render ( ) {
779
+ return originalH ( Comp , null , { default : ( ) => originalH ( 'div' , 'foo' ) } )
780
+ } ,
781
+ }
782
+ createRecord ( appId , App )
783
+
784
+ domRender ( originalH ( App ) , root )
785
+ expect ( target . innerHTML ) . toBe (
786
+ '<div class="foo"><div><div>foo</div></div></div>' ,
787
+ )
788
+ await nextTick ( )
789
+ expect ( target . innerHTML ) . toBe (
790
+ '<div class="bar"><div><div>foo</div></div></div>' ,
791
+ )
792
+
793
+ rerender ( appId , ( ) =>
794
+ originalH ( Comp , null , { default : ( ) => originalH ( 'div' , 'bar' ) } ) ,
795
+ )
796
+ await nextTick ( )
797
+ expect ( target . innerHTML ) . toBe (
798
+ '<div class="bar"><div><div>bar</div></div></div>' ,
799
+ )
800
+ } )
744
801
} )
0 commit comments