import { defineConfig } from 'vitest/config' /** * Perf/scale + environment-dependent test configuration. * * The exclusive on-demand slot for everything the correctness gate * (`vitest.config.ts`, the config a bare `vitest run` picks up) excludes: * wall-clock/scale benchmarks and the two tests whose outcome depends on * the host machine or network rather than the code. See CONTRIBUTING.md's * "Test gate" section and the exclude list in `vitest.config.ts` (root) for * why each file lives here instead of the gate. * * `include` names this set explicitly — it is the mirror image of the * root config's exclude list, not an independent glob, so the two stay in * sync by inspection. Longer timeouts than the gate's 120s/60s: one case in * tests/critical-performance-benchmark.test.ts measures ~128s of real work. */ export default defineConfig({ test: { globals: true, setupFiles: ['./tests/setup.ts'], environment: 'node', // Sequential, single fork — same isolation the gate uses, so a perf // measurement isn't skewed by sibling test contention. pool: 'forks', poolOptions: { forks: { maxForks: 1, minForks: 1, singleFork: true, isolate: true } }, testTimeout: 300000, // 5 minutes per test (the 128s case plus headroom) hookTimeout: 120000, teardownTimeout: 10000, maxConcurrency: 1, fileParallelism: false, include: [ 'tests/performance/**/*.{test,spec}.{js,ts}', 'tests/critical-performance-benchmark.test.ts', 'tests/api/performance-benchmarks.test.ts', 'tests/package-size-limit.test.ts', 'tests/model-loading.test.ts' ], reporters: process.env.CI ? ['dot'] : ['basic'], retry: process.env.CI ? 1 : 0, shard: process.env.VITEST_SHARD } })