Files
HealthLog/vitest.config.mts
T
Marc-André Bombeck a640e84142 Exclude the worktrees the tooling was already meant to exclude
git, eslint and vitest each carry an exclusion for local development
worktrees, and all three name /.worktrees/ while the convention actually in
use is /.wt-*/. Every one of them was therefore walking eleven full copies of
the source tree.

The consequences differed by tool and none of them announced itself. pnpm lint
took ten minutes instead of one and reported warnings from whatever commits
those copies happened to sit on. vitest collected duplicate suites that drag in
a second React instance, which fails in ways that have nothing to do with the
working tree. git left them merely untracked, one git add -A away from
committing the repository eleven times over.

With the true warning count finally visible, teach no-unused-vars the
underscore convention this codebase already follows and drop the five
disable directives that convention made redundant. pnpm lint is clean.

A non-underscore unused argument still warns; that was checked rather than
assumed.
2026-08-02 16:36:25 +02:00

64 lines
2.5 KiB
TypeScript

import { defineConfig } from "vitest/config";
import { dirname, resolve } from "node:path";
import { fileURLToPath } from "node:url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
export default defineConfig({
test: {
globals: true,
environment: "node",
// Pin the host timezone. CI runs UTC; without this a contributor in any
// other zone sees a different suite than the gate does — verified: a
// UTC+14 host fails five tests on an otherwise green tree. Pinning makes
// local and CI agree, and makes "which zone does this test mean?" an
// explicit choice the fixture has to state rather than a property of the
// machine it runs on. Tests that need a different HOST zone set
// `process.env.TZ` themselves and restore it afterwards (see
// `next-due-day-label.test.ts`).
env: { TZ: "UTC" },
// Primes the i18n locale cache so provider mounts resolve every
// locale synchronously (production gets the active bundle as an RSC
// prop instead — see src/lib/i18n/load-locale.ts).
setupFiles: ["./vitest.setup.ts"],
// Default `pnpm test` keeps unit tests only — integration suite uses
// testcontainers and runs separately via `pnpm test:integration`.
exclude: [
"**/node_modules/**",
"**/dist/**",
"**/.next/**",
"tests/integration/**",
// Playwright E2E suite — driven separately via `pnpm e2e`.
"e2e/**",
// Local tool worktrees create full copies of `src/` in the repo root;
// vitest must not collect stale duplicate suites from them. The copies
// also carry their own `node_modules`, so a collected duplicate drags in
// a SECOND React instance and fails in ways that have nothing to do with
// the working tree. `.wt-*` is the convention actually in use — the two
// names below predate it and are kept because both still occur.
".wt-*/**",
".claude/worktrees/**",
".worktrees/**",
],
coverage: {
provider: "v8",
// `include` enumerates the full source tree so the report shows
// per-file coverage for files never imported by a test (vitest 4
// dropped the `coverage.all` flag and uses `include` for this).
include: ["src/**/*.ts", "src/**/*.tsx"],
exclude: [
"src/generated/**",
"src/**/__tests__/**",
"src/**/*.test.ts",
"src/**/*.test.tsx",
],
},
},
resolve: {
alias: {
"@": resolve(__dirname, "src"),
},
},
});