@@ -10,6 +10,7 @@ import {
1010 markRaw ,
1111 nextTick ,
1212 nodeOps ,
13+ onMounted ,
1314 h as originalH ,
1415 ref ,
1516 render ,
@@ -18,6 +19,10 @@ import {
1819} from '@vue/runtime-test'
1920import { Fragment , createCommentVNode , createVNode } from '../../src/vnode'
2021import { 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__
2126
2227describe ( 'renderer: teleport' , ( ) => {
2328 describe ( 'eager mode' , ( ) => {
@@ -741,4 +746,56 @@ describe('renderer: teleport', () => {
741746 expect ( tRefInMounted ) . toBe ( target . children [ 1 ] )
742747 } )
743748 }
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+ } )
744801} )
0 commit comments