vitestGlobalSetup.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import getPort from 'get-port'
  2. import type { Server } from 'node:net'
  3. import { chromium, type BrowserServer } from 'playwright-chromium'
  4. import type { ViteDevServer } from 'vite'
  5. import { build, createServer, serve } from 'vitepress'
  6. let browserServer: BrowserServer
  7. let server: ViteDevServer | Server
  8. const root = '.'
  9. export async function setup() {
  10. browserServer = await chromium.launchServer({
  11. headless: !process.env.DEBUG,
  12. args: process.env.CI
  13. ? ['--no-sandbox', '--disable-setuid-sandbox']
  14. : undefined
  15. })
  16. process.env['WS_ENDPOINT'] = browserServer.wsEndpoint()
  17. const port = await getPort()
  18. process.env['PORT'] = port.toString()
  19. if (process.env['VITE_TEST_BUILD']) {
  20. await build(root)
  21. server = (await serve({ root, port })).server
  22. } else {
  23. server = await createServer(root, { port })
  24. await server!.listen()
  25. }
  26. }
  27. export async function teardown() {
  28. await browserServer.close()
  29. if ('ws' in server) {
  30. await server.close()
  31. } else {
  32. await new Promise<void>((resolve, reject) => {
  33. server.close((error) => (error ? reject(error) : resolve()))
  34. })
  35. }
  36. }