import { defineConfig } from "vitest/config"; export default defineConfig({ test: { environment: "node", include: ["src/**/*.test.ts"], // Each server suite boots + tears down its own embedded Postgres in // beforeAll/afterAll. Under the loaded serial shard (maxWorkers=1) the // graceful shutdown can occasionally cross vitest's default 10s hookTimeout, // producing flaky "Hook timed out in 10000ms" afterAll failures on CI. Give // the boot/teardown hooks generous headroom; 30s is far above the observed // worst-case teardown yet still catches a genuinely hung hook. teardownTimeout // mirrors it for the same reason. hookTimeout: 30000, teardownTimeout: 30000, // The route/authz suites import very large modules (for example // src/routes/issues.ts and its dependency graph). The first test in each // file pays the one-time transform cost inside its own timeout budget. On // the loaded serial shard (maxWorkers=1) that cost can cross vitest's // default 5s testTimeout and fail the first test, which also lets its // fire-and-forget wake leak into the next test. Give each test generous // headroom; 15s is far above the observed module-load cost yet still // catches a genuinely hung test well inside the 20 minute job limit. testTimeout: 15000, isolate: true, maxConcurrency: 1, maxWorkers: 1, minWorkers: 1, pool: "forks", sequence: { concurrent: false, hooks: "list", }, setupFiles: ["./src/__tests__/setup-supertest.ts"], }, });