diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1db78d0..ded2350d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -111,10 +111,4 @@ jobs: run: pnpm run type-check - name: Test unit - run: pnpm run test-unit - - - name: Test serve - run: pnpm run test-serve - - - name: Test build - run: pnpm run test-build + run: pnpm run test diff --git a/package.json b/package.json index a95b29cc..a7bf837c 100644 --- a/package.json +++ b/package.json @@ -13,12 +13,8 @@ "lint": "biome check . --diagnostic-level=warn", "publint": "pnpm build && pnpm -r --filter='vite-plugin-checker' exec publint", "sort-package-json": "npx sort-package-json \"packages/*/package.json\"", - "test": "pnpm test-unit && pnpm test-serve && pnpm test-build", - "test-build": "VITE_TEST_BUILD=1 vitest run -c vitest.config.e2e.ts", + "test": "pnpm vitest", "test-knip": "knip", - "test-serve": "vitest run -c vitest.config.e2e.ts", - "test-unit": "vitest run", - "test-unit:watch": "vitest", "type-check": "pnpm -r --parallel --filter \"vite-plugin-checker\" exec tsc --noEmit" }, "simple-git-hooks": { diff --git a/playground/vitestSetup.ts b/playground/vitestSetup.ts index 5d3655c1..9dc86ef6 100644 --- a/playground/vitestSetup.ts +++ b/playground/vitestSetup.ts @@ -1,29 +1,31 @@ -import { execa } from 'execa' -import fs from 'node:fs/promises' import { existsSync } from 'node:fs' +import fs from 'node:fs/promises' import type * as http from 'node:http' import os from 'node:os' import path, { dirname, join, resolve } from 'node:path' +import { execa } from 'execa' +import type { Browser, Page } from 'playwright-chromium' import { chromium } from 'playwright-chromium' import strip from 'strip-ansi' +import type { InlineConfig, ResolvedConfig, ViteDevServer } from 'vite' import { createServer, mergeConfig } from 'vite' +import type { File } from 'vitest' import { beforeAll, expect } from 'vitest' import type { Checker } from '../packages/vite-plugin-checker/src/Checker' - import { normalizeLogSerializer } from './serializers' -import type { Browser, Page } from 'playwright-chromium' -import type { InlineConfig, ResolvedConfig, ViteDevServer } from 'vite' -import type { File } from 'vitest' - expect.addSnapshotSerializer(normalizeLogSerializer) export const workspaceRoot = resolve(__dirname, '../') -export const isBuild = !!process.env.VITE_TEST_BUILD -export const isServe = !isBuild +export const isBuild = process.env.PROJECT === 'build' +export const isServe = process.env.PROJECT === 'serve' + export const isWindows = process.platform === 'win32' -export const viteBinPath = path.posix.join(workspaceRoot, 'packages/vite/bin/vite.js') +export const viteBinPath = path.posix.join( + workspaceRoot, + 'packages/vite/bin/vite.js', +) let server: ViteDevServer | http.Server @@ -58,7 +60,7 @@ export let stripedLog: string[] = [] export let diagnostics: string[] = [] export let buildSucceed: boolean -export let resolvedConfig: ResolvedConfig = undefined! +export const resolvedConfig: ResolvedConfig = undefined! export let page: Page = undefined! export let browser: Browser = undefined! @@ -128,10 +130,15 @@ beforeAll(async (s) => { if (serve) { server = await serve() viteServer = mod.viteServer - startDefaultServe({ _server: (server as any).viteDevServer, port: (server as any).port }) + startDefaultServe({ + _server: (server as any).viteDevServer, + port: (server as any).port, + }) } } else { - await startDefaultServe({ port: 5173 + Number(process.env.VITEST_POOL_ID) }) + await startDefaultServe({ + port: 5173 + Number(process.env.VITEST_POOL_ID), + }) } } } catch (e) { @@ -181,7 +188,7 @@ export async function startDefaultServe({ const viteDevServer = _server || (await createServer(testConfig)) const checker = viteDevServer.config.plugins.filter( - ({ name }) => name === 'vite-plugin-checker' + ({ name }) => name === 'vite-plugin-checker', )[0] // @ts-ignore @@ -199,10 +206,15 @@ export async function startDefaultServe({ const type = args?.[0] const payload = args?.[1] - if (type === 'vite-plugin-checker' && payload.event === 'vite-plugin-checker:error') { + if ( + type === 'vite-plugin-checker' && + payload.event === 'vite-plugin-checker:error' + ) { const existedCheckerIds = diagnostics.map((d) => d) const currentCheckerId = payload.data.diagnostics[0]?.checkerId - const checkerReported = existedCheckerIds.some((id) => id === currentCheckerId) + const checkerReported = existedCheckerIds.some( + (id) => id === currentCheckerId, + ) if (checkerReported) { // update diagnostics for the same checker diff --git a/vitest.config.e2e.ts b/vitest.config.e2e.ts deleted file mode 100644 index 4d278e01..00000000 --- a/vitest.config.e2e.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { defineConfig } from 'vitest/config' - -const timeout = process.env.CI ? 80000 : 40000 - -export default defineConfig({ - test: { - cache: false, - pool: 'forks', - poolOptions: { - forks: { - // singleFork: true, - }, - }, - include: ['./playground/**/*.spec.[tj]s'], - setupFiles: ['./playground/vitestSetup.ts'], - globalSetup: ['./playground/vitestGlobalSetup.ts'], - testTimeout: timeout, - hookTimeout: timeout, - globals: true, - reporters: 'dot', - onConsoleLog(log) { - if (log.match(/experimental|jit engine|emitted file|tailwind/i)) - return false - }, - }, - esbuild: { - target: 'node14', - }, -}) diff --git a/vitest.config.ts b/vitest.config.ts index 50b9c501..4cf624e6 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,15 +1,58 @@ import { defineConfig } from 'vitest/config' +const timeout = process.env.CI ? 80000 : 40000 + export default defineConfig({ test: { - exclude: [ - '**/node_modules/**', - '**/dist/**', - './playground/**/*.*', - './playground-temp/**/*.*', + cache: false, + onConsoleLog(log) { + if (log.match(/experimental|jit engine|emitted file|tailwind/i)) + return false + }, + globalSetup: [ + './playground/vitestGlobalSetup.ts', + './scripts/vitestGlobalSetup.ts', + ], + projects: [ + { + test: { + name: 'unit', + exclude: [ + '**/node_modules/**', + '**/dist/**', + './playground/**/*.*', + './playground-temp/**/*.*', + ], + testTimeout: 20000, + }, + }, + { + test: { + name: 'serve', + env: { + PROJECT: 'serve', + }, + include: ['./playground/**/*.spec.[tj]s'], + setupFiles: ['./playground/vitestSetup.ts'], + testTimeout: timeout, + hookTimeout: timeout, + globals: true, + }, + }, + { + test: { + name: 'build', + env: { + PROJECT: 'build', + }, + include: ['./playground/**/*.spec.[tj]s'], + setupFiles: ['./playground/vitestSetup.ts'], + testTimeout: timeout, + hookTimeout: timeout, + globals: true, + }, + }, ], - testTimeout: 20000, - globalSetup: ['./scripts/vitestGlobalSetup.ts'], }, esbuild: { target: 'node14',