test: make coverage opt-in and ratchet thresholds to the measured floor

Coverage was enabled by default, which forced v8 instrumentation on every run
and made a focused `vitest run <file>` fail the global thresholds that a
single file can never satisfy. `pnpm test:coverage` now opts in explicitly
while `pnpm test` stays fast.

Thresholds ratcheted from 36/29/30/37 to the measured full-suite floor of
37/30/31/38, so a drop in coverage fails again. Also drops a stale comment
about a parent Laravel repo and a dead .next.prev exclude from the config.
This commit is contained in:
openhands committed 2026-10-18 14:50:50 +02:00
1 parent 4776a41c01
commit 07c5904879
2 files changed
+20 -17

No files matched your search

+3 -3
View File
@@ -18,8 +18,8 @@
"format": "biome format --write .",
"diag:permissions": "tsx scripts/diagnose-permission-page.ts",
"jobs:worker": "node --conditions=react-server --import tsx scripts/jobs-worker.ts",
"test": "bash scripts/with-memory-cap.sh 8g vitest run --coverage.enabled=false",
"test:coverage": "bash scripts/with-memory-cap.sh 8g vitest run",
"test": "bash scripts/with-memory-cap.sh 8g vitest run",
"test:coverage": "bash scripts/with-memory-cap.sh 8g vitest run --coverage.enabled=true",
"typecheck": "bash scripts/with-memory-cap.sh 6g tsc --noEmit",
"db:generate": "drizzle-kit generate",
"db:introspect": "drizzle-kit introspect",
@@ -34,7 +34,7 @@
"db:studio": "drizzle-kit studio",
"gamedata:compress": "node scripts/compress-gamedata.mjs",
"hk:matrix:check": "tsx scripts/verify-housekeeping-matrix.ts",
"test:housekeeping": "bash scripts/with-memory-cap.sh 8g vitest run --coverage.enabled=false src/features/housekeeping src/lib/admin-theme-source-audit.test.ts src/lib/admin/authorization-contract.test.ts",
"test:housekeeping": "bash scripts/with-memory-cap.sh 8g vitest run src/features/housekeeping src/lib/admin-theme-source-audit.test.ts src/lib/admin/authorization-contract.test.ts",
"assets:editor": "node scripts/copy-editor-assets.mjs",
"deps:audit": "pnpm audit --audit-level=high",
"analyze": "pnpm assets:editor && bash scripts/with-memory-cap.sh 10g next build --webpack && node scripts/performance-report.mjs --output-dir build-reports",
+17 -14
View File
@@ -1,8 +1,9 @@
import { fileURLToPath } from "node:url";
import { defineConfig } from "vitest/config";
// Local config so Vitest does not walk up into the parent Laravel repo's
// vite.config.js (this app lives inside the Laravel project tree).
// Project-local config: keeps the `@/` alias, the server-only stub and the
// env fallbacks with the repo instead of relying on whatever vite config a
// parent directory happens to provide.
export default defineConfig({
resolve: {
alias: {
@@ -26,22 +27,24 @@ export default defineConfig({
DATABASE_URL: "mysql://root:root@localhost:3306/test",
},
testTimeout: 10000,
exclude: [
"integration/**",
"e2e/**",
"node_modules/**",
".next/**",
".next.prev/**",
],
exclude: ["integration/**", "e2e/**", "node_modules/**", ".next/**"],
coverage: {
enabled: true,
// Off unless asked for (`pnpm test:coverage` passes
// `--coverage.enabled=true`): a focused `vitest run <file>` should
// not fail the global thresholds it cannot possibly meet, and
// measuring v8 coverage on every run costs real time.
enabled: false,
provider: "v8",
reporter: ["text", "lcov", "html"],
// Ratchet floor: measured 37.14 / 30.09 / 31.74 / 38.13 on the full
// suite (statements/branches/functions/lines). Rounded down so only
// a real regression fails the build — raise these to the new
// measured floor whenever coverage improves.
thresholds: {
statements: 36,
branches: 29,
functions: 30,
lines: 37,
statements: 37,
branches: 30,
functions: 31,
lines: 38,
},
include: ["src/**/*.{ts,tsx}"],
exclude: [