--- /dev/null
+import path from 'node:path'
+import {
+ E2E_TIMEOUT,
+ setupPuppeteer,
+} from '../../../packages/vue/__tests__/e2e/e2eUtils'
+import connect from 'connect'
+import sirv from 'sirv'
+import { nextTick } from 'vue'
+import { ports } from '../utils'
+const { page, click, html } = setupPuppeteer()
+
+describe('vdom / vapor interop', () => {
+ let server: any
+ const port = ports.teleport
+ beforeAll(() => {
+ server = connect()
+ .use(sirv(path.resolve(import.meta.dirname, '../dist')))
+ .listen(port)
+ process.on('SIGTERM', () => server && server.close())
+ })
+
+ afterAll(() => {
+ server.close()
+ })
+
+ beforeEach(async () => {
+ const baseUrl = `http://localhost:${port}/teleport/`
+ await page().goto(baseUrl)
+ await page().waitForSelector('#app')
+ })
+
+ describe('vapor teleport', () => {
+ test(
+ 'render vdom component',
+ async () => {
+ const targetSelector = '.target'
+ const testSelector = '.interop-render-vdom-comp'
+ const containerSelector = `${testSelector} > div`
+ const btnSelector = `${testSelector} > button`
+
+ // teleport is disabled
+ expect(await html(containerSelector)).toBe('<h1>vdom comp</h1>')
+ expect(await html(targetSelector)).toBe('')
+
+ // enable teleport
+ await click(btnSelector)
+ await nextTick()
+
+ expect(await html(containerSelector)).toBe('')
+ expect(await html(targetSelector)).toBe('<h1>vdom comp</h1>')
+
+ // disable teleport
+ await click(btnSelector)
+ await nextTick()
+ expect(await html(containerSelector)).toBe('<h1>vdom comp</h1>')
+ expect(await html(targetSelector)).toBe('')
+ },
+ E2E_TIMEOUT,
+ )
+ })
+})
} from '../../../packages/vue/__tests__/e2e/e2eUtils'
import connect from 'connect'
import sirv from 'sirv'
+import { ports } from '../utils'
describe('e2e: todomvc', () => {
const {
} = setupPuppeteer()
let server: any
- const port = '8194'
+ const port = ports.todomvc
beforeAll(() => {
server = connect()
.use(sirv(path.resolve(import.meta.dirname, '../dist')))
} from '../../../packages/vue/__tests__/e2e/e2eUtils'
import connect from 'connect'
import sirv from 'sirv'
+import { ports } from '../utils'
describe('vdom / vapor interop', () => {
const { page, click, text, enterValue } = setupPuppeteer()
let server: any
- const port = '8193'
+ const port = ports.vdomInterop
beforeAll(() => {
server = connect()
.use(sirv(path.resolve(import.meta.dirname, '../dist')))
--- /dev/null
+<script setup vapor>
+import { ref, Teleport } from 'vue'
+import VdomComp from './components/VdomComp.vue'
+const disabled = ref(true)
+</script>
+
+<template>
+ <div class="target"></div>
+ <div class="interop-render-vdom-comp">
+ <button @click="disabled = !disabled">toggle</button>
+ <div>
+ <Teleport to=".target" defer :disabled>
+ <VdomComp />
+ </Teleport>
+ </div>
+ </div>
+</template>