Skip to content

Commit 51ca617

Browse files
committed
test: add e2e tests for vdom interop
1 parent 098f50d commit 51ca617

File tree

10 files changed

+104
-2
lines changed

10 files changed

+104
-2
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import path from 'node:path'
2+
import {
3+
E2E_TIMEOUT,
4+
setupPuppeteer,
5+
} from '../../../packages/vue/__tests__/e2e/e2eUtils'
6+
import connect from 'connect'
7+
import sirv from 'sirv'
8+
import { nextTick } from 'vue'
9+
import { ports } from '../utils'
10+
const { page, click, html } = setupPuppeteer()
11+
12+
describe('vdom / vapor interop', () => {
13+
let server: any
14+
const port = ports.teleport
15+
beforeAll(() => {
16+
server = connect()
17+
.use(sirv(path.resolve(import.meta.dirname, '../dist')))
18+
.listen(port)
19+
process.on('SIGTERM', () => server && server.close())
20+
})
21+
22+
afterAll(() => {
23+
server.close()
24+
})
25+
26+
beforeEach(async () => {
27+
const baseUrl = `http://localhost:${port}/teleport/`
28+
await page().goto(baseUrl)
29+
await page().waitForSelector('#app')
30+
})
31+
32+
describe('vapor teleport', () => {
33+
test(
34+
'render vdom component',
35+
async () => {
36+
const targetSelector = '.target'
37+
const testSelector = '.interop-render-vdom-comp'
38+
const containerSelector = `${testSelector} > div`
39+
const btnSelector = `${testSelector} > button`
40+
41+
// teleport is disabled
42+
expect(await html(containerSelector)).toBe('<h1>vdom comp</h1>')
43+
expect(await html(targetSelector)).toBe('')
44+
45+
// enable teleport
46+
await click(btnSelector)
47+
await nextTick()
48+
49+
expect(await html(containerSelector)).toBe('')
50+
expect(await html(targetSelector)).toBe('<h1>vdom comp</h1>')
51+
52+
// disable teleport
53+
await click(btnSelector)
54+
await nextTick()
55+
expect(await html(containerSelector)).toBe('<h1>vdom comp</h1>')
56+
expect(await html(targetSelector)).toBe('')
57+
},
58+
E2E_TIMEOUT,
59+
)
60+
})
61+
})

packages-private/vapor-e2e-test/__tests__/todomvc.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
} from '../../../packages/vue/__tests__/e2e/e2eUtils'
66
import connect from 'connect'
77
import sirv from 'sirv'
8+
import { ports } from '../utils'
89

910
describe('e2e: todomvc', () => {
1011
const {
@@ -23,7 +24,7 @@ describe('e2e: todomvc', () => {
2324
} = setupPuppeteer()
2425

2526
let server: any
26-
const port = '8194'
27+
const port = ports.todomvc
2728
beforeAll(() => {
2829
server = connect()
2930
.use(sirv(path.resolve(import.meta.dirname, '../dist')))

packages-private/vapor-e2e-test/__tests__/vdomInterop.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ import {
55
} from '../../../packages/vue/__tests__/e2e/e2eUtils'
66
import connect from 'connect'
77
import sirv from 'sirv'
8+
import { ports } from '../utils'
89

910
describe('vdom / vapor interop', () => {
1011
const { page, click, text, enterValue } = setupPuppeteer()
1112

1213
let server: any
13-
const port = '8193'
14+
const port = ports.vdomInterop
1415
beforeAll(() => {
1516
server = connect()
1617
.use(sirv(path.resolve(import.meta.dirname, '../dist')))
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
<a href="/interop/">VDOM / Vapor interop</a>
22
<a href="/todomvc/">Vapor TodoMVC</a>
3+
<a href="/teleport/">Vapor Teleport</a>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<script setup vapor>
2+
import { ref, Teleport } from 'vue'
3+
import VdomComp from './components/VdomComp.vue'
4+
const disabled = ref(true)
5+
</script>
6+
7+
<template>
8+
<div class="target"></div>
9+
<div class="interop-render-vdom-comp">
10+
<button @click="disabled = !disabled">toggle</button>
11+
<div>
12+
<Teleport to=".target" defer :disabled>
13+
<VdomComp />
14+
</Teleport>
15+
</div>
16+
</div>
17+
</template>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script setup vapor lang="ts">
2+
const msg = 'vdom comp'
3+
</script>
4+
5+
<template>
6+
<h1>{{ msg }}</h1>
7+
</template>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<script type="module" src="./main.ts"></script>
2+
<div id="app"></div>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { createVaporApp, vaporInteropPlugin } from 'vue'
2+
import App from './App.vue'
3+
import 'todomvc-app-css/index.css'
4+
5+
createVaporApp(App).use(vaporInteropPlugin).mount('#app')
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// make sure these ports are unique
2+
export const ports = {
3+
vdomInterop: 8193,
4+
todomvc: 8194,
5+
teleport: 8195,
6+
}

packages-private/vapor-e2e-test/vite.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export default defineConfig({
1414
input: {
1515
interop: resolve(import.meta.dirname, 'interop/index.html'),
1616
todomvc: resolve(import.meta.dirname, 'todomvc/index.html'),
17+
teleport: resolve(import.meta.dirname, 'teleport/index.html'),
1718
},
1819
},
1920
},

0 commit comments

Comments
 (0)