]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
test: add e2e tests for vdom interop
authordaiwei <daiwei521@126.com>
Mon, 24 Mar 2025 13:14:46 +0000 (21:14 +0800)
committerdaiwei <daiwei521@126.com>
Mon, 24 Mar 2025 13:14:46 +0000 (21:14 +0800)
packages-private/vapor-e2e-test/__tests__/teleport.spec.ts [new file with mode: 0644]
packages-private/vapor-e2e-test/__tests__/todomvc.spec.ts
packages-private/vapor-e2e-test/__tests__/vdomInterop.spec.ts
packages-private/vapor-e2e-test/index.html
packages-private/vapor-e2e-test/teleport/App.vue [new file with mode: 0644]
packages-private/vapor-e2e-test/teleport/components/VdomComp.vue [new file with mode: 0644]
packages-private/vapor-e2e-test/teleport/index.html [new file with mode: 0644]
packages-private/vapor-e2e-test/teleport/main.ts [new file with mode: 0644]
packages-private/vapor-e2e-test/utils.ts [new file with mode: 0644]
packages-private/vapor-e2e-test/vite.config.ts

diff --git a/packages-private/vapor-e2e-test/__tests__/teleport.spec.ts b/packages-private/vapor-e2e-test/__tests__/teleport.spec.ts
new file mode 100644 (file)
index 0000000..dc3efa1
--- /dev/null
@@ -0,0 +1,61 @@
+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,
+    )
+  })
+})
index 3de8392e5e26e0bc8bfcfc4e0b741283f9fc22a8..035691fd69b5b56af117103f64223aa46a5e61f2 100644 (file)
@@ -5,6 +5,7 @@ import {
 } from '../../../packages/vue/__tests__/e2e/e2eUtils'
 import connect from 'connect'
 import sirv from 'sirv'
+import { ports } from '../utils'
 
 describe('e2e: todomvc', () => {
   const {
@@ -23,7 +24,7 @@ describe('e2e: todomvc', () => {
   } = setupPuppeteer()
 
   let server: any
-  const port = '8194'
+  const port = ports.todomvc
   beforeAll(() => {
     server = connect()
       .use(sirv(path.resolve(import.meta.dirname, '../dist')))
index 360f48085a14e7ae4f587d9a89ffeae216f582fc..a3069d1aed249340b7d2de163bc7b4afecd79581 100644 (file)
@@ -5,12 +5,13 @@ import {
 } 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')))
index 7dc205e5ab024878395e5fb22c09679be565c6a3..bb1234e8e10d79f1613e1067a8cfaec9528df651 100644 (file)
@@ -1,2 +1,3 @@
 <a href="/interop/">VDOM / Vapor interop</a>
 <a href="/todomvc/">Vapor TodoMVC</a>
+<a href="/teleport/">Vapor Teleport</a>
diff --git a/packages-private/vapor-e2e-test/teleport/App.vue b/packages-private/vapor-e2e-test/teleport/App.vue
new file mode 100644 (file)
index 0000000..d2aeba8
--- /dev/null
@@ -0,0 +1,17 @@
+<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>
diff --git a/packages-private/vapor-e2e-test/teleport/components/VdomComp.vue b/packages-private/vapor-e2e-test/teleport/components/VdomComp.vue
new file mode 100644 (file)
index 0000000..6eba913
--- /dev/null
@@ -0,0 +1,7 @@
+<script setup vapor lang="ts">
+const msg = 'vdom comp'
+</script>
+
+<template>
+  <h1>{{ msg }}</h1>
+</template>
diff --git a/packages-private/vapor-e2e-test/teleport/index.html b/packages-private/vapor-e2e-test/teleport/index.html
new file mode 100644 (file)
index 0000000..79052a0
--- /dev/null
@@ -0,0 +1,2 @@
+<script type="module" src="./main.ts"></script>
+<div id="app"></div>
diff --git a/packages-private/vapor-e2e-test/teleport/main.ts b/packages-private/vapor-e2e-test/teleport/main.ts
new file mode 100644 (file)
index 0000000..2e962ef
--- /dev/null
@@ -0,0 +1,5 @@
+import { createVaporApp, vaporInteropPlugin } from 'vue'
+import App from './App.vue'
+import 'todomvc-app-css/index.css'
+
+createVaporApp(App).use(vaporInteropPlugin).mount('#app')
diff --git a/packages-private/vapor-e2e-test/utils.ts b/packages-private/vapor-e2e-test/utils.ts
new file mode 100644 (file)
index 0000000..a42064b
--- /dev/null
@@ -0,0 +1,6 @@
+// make sure these ports are unique
+export const ports = {
+  vdomInterop: 8193,
+  todomvc: 8194,
+  teleport: 8195,
+}
index 1e29a4dbd13f89e6d657f6804ec87af653c62924..a2816f4b6db4bdaf2831b42401a9d92a1bd330ff 100644 (file)
@@ -14,6 +14,7 @@ export default defineConfig({
       input: {
         interop: resolve(import.meta.dirname, 'interop/index.html'),
         todomvc: resolve(import.meta.dirname, 'todomvc/index.html'),
+        teleport: resolve(import.meta.dirname, 'teleport/index.html'),
       },
     },
   },