Przeglądaj źródła

refactor(vapor-e2e): replace server setup with startE2ETestServer utility

daiwei 1 miesiąc temu
rodzic
commit
cafa3d5450

+ 41 - 0
packages-private/vapor-e2e-test/__tests__/server.ts

@@ -0,0 +1,41 @@
+import path from 'node:path'
+import connect from 'connect'
+import sirv from 'sirv'
+
+export type E2ETestServer = {
+  port: number
+  close: () => void
+}
+
+export async function startE2ETestServer(
+  testName: string,
+  dirname: string,
+): Promise<E2ETestServer> {
+  const app = connect().use(sirv(path.resolve(dirname, '../dist')))
+  let server: any
+  let port = 0
+
+  await new Promise<void>((resolve, reject) => {
+    server = app.listen(0, () => {
+      const address = server.address()
+      if (!address || typeof address === 'string') {
+        reject(new Error(`[${testName}] failed to bind e2e server port`))
+        return
+      }
+      port = address.port
+      resolve()
+    })
+    server.once('error', reject)
+  })
+
+  const onSigterm = () => server && server.close()
+  process.on('SIGTERM', onSigterm)
+
+  return {
+    port,
+    close: () => {
+      process.off('SIGTERM', onSigterm)
+      server.close()
+    },
+  }
+}

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

@@ -1,10 +1,8 @@
-import path from 'node:path'
 import {
   E2E_TIMEOUT,
   setupPuppeteer,
 } from '../../../packages/vue/__tests__/e2e/e2eUtils'
-import connect from 'connect'
-import sirv from 'sirv'
+import { startE2ETestServer } from './server'
 
 describe('e2e: todomvc', () => {
   const {
@@ -22,14 +20,11 @@ describe('e2e: todomvc', () => {
     timeout,
   } = setupPuppeteer()
 
-  let server: any
+  let server: Awaited<ReturnType<typeof startE2ETestServer>>
   let port = 0
-  beforeAll(() => {
-    server = connect()
-      .use(sirv(path.resolve(import.meta.dirname, '../dist')))
-      .listen(0)
-    port = server.address().port
-    process.on('SIGTERM', () => server && server.close())
+  beforeAll(async () => {
+    server = await startE2ETestServer('todomvc', import.meta.dirname)
+    port = server.port
   })
 
   afterAll(() => {

+ 5 - 10
packages-private/vapor-e2e-test/__tests__/transition-group.spec.ts

@@ -1,11 +1,9 @@
-import path from 'node:path'
 import {
   E2E_TIMEOUT,
   setupPuppeteer,
 } from '../../../packages/vue/__tests__/e2e/e2eUtils'
-import connect from 'connect'
-import sirv from 'sirv'
 import { expect } from 'vitest'
+import { startE2ETestServer } from './server'
 const { page, html, transitionStart, waitForInnerHTML } = setupPuppeteer()
 
 function toSlug(value: string) {
@@ -32,14 +30,11 @@ function resolveCaseId(testName: string) {
 }
 
 describe('vapor transition-group', () => {
-  let server: any
+  let server: Awaited<ReturnType<typeof startE2ETestServer>>
   let port = 0
-  beforeAll(() => {
-    server = connect()
-      .use(sirv(path.resolve(import.meta.dirname, '../dist')))
-      .listen(0)
-    port = server.address().port
-    process.on('SIGTERM', () => server && server.close())
+  beforeAll(async () => {
+    server = await startE2ETestServer('transition-group', import.meta.dirname)
+    port = server.port
   })
 
   afterAll(() => {

+ 5 - 10
packages-private/vapor-e2e-test/__tests__/transition.spec.ts

@@ -1,11 +1,9 @@
-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 { startE2ETestServer } from './server'
 const {
   page,
   classList,
@@ -46,14 +44,11 @@ function resolveCaseId(testName: string) {
 }
 
 describe('vapor transition', () => {
-  let server: any
+  let server: Awaited<ReturnType<typeof startE2ETestServer>>
   let port = 0
-  beforeAll(() => {
-    server = connect()
-      .use(sirv(path.resolve(import.meta.dirname, '../dist')))
-      .listen(0)
-    port = server.address().port
-    process.on('SIGTERM', () => server && server.close())
+  beforeAll(async () => {
+    server = await startE2ETestServer('transition', import.meta.dirname)
+    port = server.port
   })
 
   afterAll(() => {

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

@@ -1,10 +1,8 @@
-import path from 'node:path'
 import {
   E2E_TIMEOUT,
   setupPuppeteer,
 } from '../../../packages/vue/__tests__/e2e/e2eUtils'
-import connect from 'connect'
-import sirv from 'sirv'
+import { startE2ETestServer } from './server'
 const {
   page,
   click,
@@ -17,14 +15,11 @@ const {
   timeout,
 } = setupPuppeteer()
 
-let server: any
+let server: Awaited<ReturnType<typeof startE2ETestServer>>
 let port = 0
-beforeAll(() => {
-  server = connect()
-    .use(sirv(path.resolve(import.meta.dirname, '../dist')))
-    .listen(0)
-  port = server.address().port
-  process.on('SIGTERM', () => server && server.close())
+beforeAll(async () => {
+  server = await startE2ETestServer('vdomInterop', import.meta.dirname)
+  port = server.port
 })
 afterAll(() => {
   server.close()