@@ -6,9 +6,11 @@ import {
6
6
Teleport ,
7
7
Text ,
8
8
ref ,
9
- nextTick
9
+ nextTick ,
10
+ markRaw
10
11
} from '@vue/runtime-test'
11
12
import { createVNode , Fragment } from '../../src/vnode'
13
+ import { compile } from 'vue'
12
14
13
15
describe ( 'renderer: teleport' , ( ) => {
14
16
test ( 'should work' , ( ) => {
@@ -299,4 +301,49 @@ describe('renderer: teleport', () => {
299
301
)
300
302
expect ( serializeInner ( target ) ) . toBe ( '' )
301
303
} )
304
+
305
+ test ( 'should work with block tree' , async ( ) => {
306
+ const target = nodeOps . createElement ( 'div' )
307
+ const root = nodeOps . createElement ( 'div' )
308
+ const disabled = ref ( false )
309
+
310
+ const App = {
311
+ setup ( ) {
312
+ return {
313
+ target : markRaw ( target ) ,
314
+ disabled
315
+ }
316
+ } ,
317
+ render : compile ( `
318
+ <teleport :to="target" :disabled="disabled">
319
+ <div>teleported</div><span>{{ disabled }}</span>
320
+ </teleport>
321
+ <div>root</div>
322
+ ` )
323
+ }
324
+ render ( h ( App ) , root )
325
+ expect ( serializeInner ( root ) ) . toMatchInlineSnapshot (
326
+ `"<!--teleport start--><!--teleport end--><div>root</div>"`
327
+ )
328
+ expect ( serializeInner ( target ) ) . toMatchInlineSnapshot (
329
+ `"<div>teleported</div><span>false</span>"`
330
+ )
331
+
332
+ disabled . value = true
333
+ await nextTick ( )
334
+ expect ( serializeInner ( root ) ) . toMatchInlineSnapshot (
335
+ `"<!--teleport start--><div>teleported</div><span>true</span><!--teleport end--><div>root</div>"`
336
+ )
337
+ expect ( serializeInner ( target ) ) . toBe ( `` )
338
+
339
+ // toggle back
340
+ disabled . value = false
341
+ await nextTick ( )
342
+ expect ( serializeInner ( root ) ) . toMatchInlineSnapshot (
343
+ `"<!--teleport start--><!--teleport end--><div>root</div>"`
344
+ )
345
+ expect ( serializeInner ( target ) ) . toMatchInlineSnapshot (
346
+ `"<div>teleported</div><span>false</span>"`
347
+ )
348
+ } )
302
349
} )
0 commit comments