]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
test: add e2e tests for vdom teleport vapor interop
authordaiwei <daiwei521@126.com>
Thu, 27 Mar 2025 07:33:02 +0000 (15:33 +0800)
committerdaiwei <daiwei521@126.com>
Thu, 27 Mar 2025 07:33:02 +0000 (15:33 +0800)
packages-private/vapor-e2e-test/__tests__/vdomInterop.spec.ts
packages-private/vapor-e2e-test/interop/App.vue
packages-private/vapor-e2e-test/interop/components/SimpleVaporComp.vue [new file with mode: 0644]
packages-private/vapor-e2e-test/interop/components/VaporComp.vue [moved from packages-private/vapor-e2e-test/interop/VaporComp.vue with 100% similarity]
packages-private/vapor-e2e-test/interop/components/VdomComp.vue [moved from packages-private/vapor-e2e-test/interop/VdomComp.vue with 100% similarity]

index a3069d1aed249340b7d2de163bc7b4afecd79581..734c9fde19038548939350a5e0cbe527cfbc4102 100644 (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('')
+    })
+  })
 })
index 772a6989dd74c90f2e1cb10fbfed734996cc44fe..dcdd5f99aceafdc6f5cf9d24715f0ed2f3cad6d8 100644 (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>
diff --git a/packages-private/vapor-e2e-test/interop/components/SimpleVaporComp.vue b/packages-private/vapor-e2e-test/interop/components/SimpleVaporComp.vue
new file mode 100644 (file)
index 0000000..d2d7be5
--- /dev/null
@@ -0,0 +1,6 @@
+<script setup vapor lang="ts">
+const msg = 'vapor comp'
+</script>
+<template>
+    <div>{{ msg }}</div>
+</template>