From ae50db7710ce371eb806f93c7dde386bee45e948 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Fri, 6 Sep 2024 16:24:38 -0700 Subject: [PATCH] [Optimization] parallel testing (#4075) * add: vitest projects (multiple) preparations for parallel testing * update: tests workflow better parallel testing --- .github/workflows/tests.yml | 78 +++++++++++++++++++++++++++++++++++-- vitest.config.ts | 59 +++++++++++++++------------- vitest.workspace.ts | 54 +++++++++++++++++++++++++ 3 files changed, 160 insertions(+), 31 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index adac45519ab..2a78ec252b8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -15,8 +15,8 @@ on: types: [checks_requested] jobs: - run-tests: # Define a job named "run-tests" - name: Run tests # Human-readable name for the job + run-misc-tests: # Define a job named "run-tests" + name: Run misc tests # Human-readable name for the job runs-on: ubuntu-latest # Specify the latest Ubuntu runner for the job steps: @@ -31,5 +31,75 @@ jobs: - name: Install Node.js dependencies # Step to install Node.js dependencies run: npm ci # Use 'npm ci' to install dependencies - - name: tests # Step to run tests - run: npm run test:silent \ No newline at end of file + - name: pre-test # pre-test to check overrides + run: npx vitest run --project pre + - name: test misc + run: npx vitest --project misc + + run-abilities-tests: + name: Run abilities tests + runs-on: ubuntu-latest + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install Node.js dependencies + run: npm ci + - name: pre-test + run: npx vitest run --project pre + - name: test abilities + run: npx vitest --project abilities + + run-items-tests: + name: Run items tests + runs-on: ubuntu-latest + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install Node.js dependencies + run: npm ci + - name: pre-test + run: npx vitest run --project pre + - name: test items + run: npx vitest --project items + + run-moves-tests: + name: Run moves tests + runs-on: ubuntu-latest + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install Node.js dependencies + run: npm ci + - name: pre-test + run: npx vitest run --project pre + - name: test moves + run: npx vitest --project moves + + run-battle-tests: + name: Run battle tests + runs-on: ubuntu-latest + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install Node.js dependencies + run: npm ci + - name: pre-test + run: npx vitest run --project pre + - name: test battle + run: npx vitest --project battle \ No newline at end of file diff --git a/vitest.config.ts b/vitest.config.ts index d1827103807..9a765a89ae7 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,38 +1,43 @@ -import { defineProject } from 'vitest/config'; +import { defineProject, UserWorkspaceConfig } from 'vitest/config'; import { defaultConfig } from './vite.config'; +export const defaultProjectTestConfig: UserWorkspaceConfig["test"] = { + setupFiles: ['./src/test/vitest.setup.ts'], + server: { + deps: { + inline: ['vitest-canvas-mock'], + //@ts-ignore + optimizer: { + web: { + include: ['vitest-canvas-mock'], + } + } + } + }, + environment: 'jsdom' as const, + environmentOptions: { + jsdom: { + resources: 'usable', + }, + }, + threads: false, + trace: true, + restoreMocks: true, + watch: false, + coverage: { + provider: 'istanbul' as const, + reportsDirectory: 'coverage' as const, + reporters: ['text-summary', 'html'], + }, +} + export default defineProject(({ mode }) => ({ ...defaultConfig, test: { + ...defaultProjectTestConfig, name: "main", include: ["./src/test/**/*.{test,spec}.ts"], exclude: ["./src/test/pre.test.ts"], - setupFiles: ['./src/test/vitest.setup.ts'], - server: { - deps: { - inline: ['vitest-canvas-mock'], - optimizer: { - web: { - include: ['vitest-canvas-mock'], - } - } - } - }, - environment: 'jsdom' as const, - environmentOptions: { - jsdom: { - resources: 'usable', - }, - }, - threads: false, - trace: true, - restoreMocks: true, - watch: false, - coverage: { - provider: 'istanbul' as const, - reportsDirectory: 'coverage' as const, - reporters: ['text-summary', 'html'], - }, }, esbuild: { pure: mode === 'production' ? [ 'console.log' ] : [], diff --git a/vitest.workspace.ts b/vitest.workspace.ts index 38121942004..a885b77dc9d 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -1,5 +1,6 @@ import { defineWorkspace } from "vitest/config"; import { defaultConfig } from "./vite.config"; +import { defaultProjectTestConfig } from "./vitest.config"; export default defineWorkspace([ { @@ -10,5 +11,58 @@ export default defineWorkspace([ environment: "jsdom", }, }, + { + ...defaultConfig, + test: { + ...defaultProjectTestConfig, + name: "misc", + include: [ + "src/test/achievements/**/*.{test,spec}.ts", + "src/test/arena/**/*.{test,spec}.ts", + "src/test/battlerTags/**/*.{test,spec}.ts", + "src/test/eggs/**/*.{test,spec}.ts", + "src/test/field/**/*.{test,spec}.ts", + "src/test/inputs/**/*.{test,spec}.ts", + "src/test/localization/**/*.{test,spec}.ts", + "src/test/phases/**/*.{test,spec}.ts", + "src/test/settingMenu/**/*.{test,spec}.ts", + "src/test/sprites/**/*.{test,spec}.ts", + "src/test/ui/**/*.{test,spec}.ts", + "src/test/*.{test,spec}.ts", + ], + }, + }, + { + ...defaultConfig, + test: { + ...defaultProjectTestConfig, + name: "abilities", + include: ["src/test/abilities/**/*.{test,spec}.ts"], + }, + }, + { + ...defaultConfig, + test: { + ...defaultProjectTestConfig, + name: "battle", + include: ["src/test/battle/**/*.{test,spec}.ts"], + }, + }, + { + ...defaultConfig, + test: { + ...defaultProjectTestConfig, + name: "items", + include: ["src/test/items/**/*.{test,spec}.ts"], + }, + }, + { + ...defaultConfig, + test: { + ...defaultProjectTestConfig, + name: "moves", + include: ["src/test/moves/**/*.{test,spec}.ts"], + }, + }, "./vitest.config.ts", ]);