test: add e2e tests for vdom teleport vapor interop

This commit is contained in:
daiwei 2025-03-27 15:33:02 +08:00
parent 5574fbf521
commit ba9db34379
5 changed files with 58 additions and 6 deletions

View File

@ -6,10 +6,10 @@ import {
import connect from 'connect'
import sirv from 'sirv'
import { ports } from '../utils'
import { nextTick } from 'vue'
const { page, click, text, enterValue, html } = setupPuppeteer()
describe('vdom / vapor interop', () => {
const { page, click, text, enterValue } = setupPuppeteer()
let server: any
const port = ports.vdomInterop
beforeAll(() => {
@ -19,6 +19,12 @@ describe('vdom / vapor interop', () => {
process.on('SIGTERM', () => server && server.close())
})
beforeEach(async () => {
const baseUrl = `http://localhost:${port}/interop/`
await page().goto(baseUrl)
await page().waitForSelector('#app')
})
afterAll(() => {
server.close()
})
@ -26,9 +32,6 @@ describe('vdom / vapor interop', () => {
test(
'should work',
async () => {
const baseUrl = `http://localhost:${port}/interop/`
await page().goto(baseUrl)
expect(await text('.vapor > h2')).toContain('Vapor component in VDOM')
expect(await text('.vapor-prop')).toContain('hello')
@ -82,4 +85,33 @@ describe('vdom / vapor interop', () => {
},
E2E_TIMEOUT,
)
describe('teleport', () => {
const testSelector = '.teleport'
test('render vapor component', async () => {
const targetSelector = `${testSelector} .teleport-target`
const containerSelector = `${testSelector} .render-vapor-comp`
const buttonSelector = `${containerSelector} button`
// teleport is disabled by default
expect(await html(containerSelector)).toBe(
`<button>toggle</button><div>vapor comp</div>`,
)
expect(await html(targetSelector)).toBe('')
// disabled -> enabled
await click(buttonSelector)
await nextTick()
expect(await html(containerSelector)).toBe(`<button>toggle</button>`)
expect(await html(targetSelector)).toBe('<div>vapor comp</div>')
// enabled -> disabled
await click(buttonSelector)
await nextTick()
expect(await html(containerSelector)).toBe(
`<button>toggle</button><div>vapor comp</div>`,
)
expect(await html(targetSelector)).toBe('')
})
})
})

View File

@ -1,9 +1,11 @@
<script setup lang="ts">
import { ref } from 'vue'
import VaporComp from './VaporComp.vue'
import VaporComp from './components/VaporComp.vue'
import SimpleVaporComp from './components/SimpleVaporComp.vue'
const msg = ref('hello')
const passSlot = ref(true)
const disabled = ref(true)
</script>
<template>
@ -19,4 +21,16 @@ const passSlot = ref(true)
<template #test v-if="passSlot">A test slot</template>
</VaporComp>
<!-- teleport -->
<div class="teleport">
<div class="teleport-target"></div>
<div class="render-vapor-comp">
<button @click="disabled = !disabled">toggle</button>
<Teleport to=".teleport-target" defer :disabled="disabled">
<SimpleVaporComp />
</Teleport>
</div>
</div>
<!-- teleport end-->
</template>

View File

@ -0,0 +1,6 @@
<script setup vapor lang="ts">
const msg = 'vapor comp'
</script>
<template>
<div>{{ msg }}</div>
</template>