Files
fission-ai__openspec/vitest.config.ts
T
Ryan de Melo d56f9fc766 test: opt the suite out of telemetry (#1668)
34 test files spawn the real CLI across ~62 call sites. Each spawn runs
the preAction hook exactly like a user invocation, so a local `pnpm test`
persisted an anonymousId into the developer's real global config
(~/.config/openspec/config.json) and POSTed a command_executed event per
spawn to the telemetry endpoint.

CI never saw this because CI=<truthy> already disables telemetry; it only
happens on contributor machines, where it also skews the maintainers'
usage data with test traffic.

Set OPENSPEC_TELEMETRY=0 / DO_NOT_TRACK=1 via vitest's env so workers and
the CLI children they spawn are both covered. Telemetry's own tests
delete these vars before asserting, so they are unaffected.
2026-08-19 18:39:27 +00:00

58 lines
1.8 KiB
TypeScript

import { defineConfig } from 'vitest/config';
import os from 'node:os';
function resolveMaxWorkers(): number | undefined {
// Allow callers (CI/agents) to override without editing config.
const raw = process.env.VITEST_MAX_WORKERS;
if (raw) {
const parsed = Number(raw);
if (Number.isFinite(parsed) && parsed > 0) {
return parsed;
}
}
// Vitest v3 defaults to `pool: "forks"` and scales worker processes with CPU.
// This repo's tests can spawn many Node processes (CLI invocations, temp FS),
// so cap parallelism to avoid runaway CPU/memory usage in automation.
const cpuCount = typeof os.availableParallelism === 'function'
? os.availableParallelism()
: os.cpus().length;
return Math.min(4, Math.max(1, cpuCount));
}
export default defineConfig({
test: {
globals: true,
environment: 'node',
globalSetup: './vitest.setup.ts',
// Opt the suite out of telemetry. Many tests spawn the real CLI, which runs
// the preAction hook like any user invocation: it would persist an
// anonymousId into the developer's *real* global config and POST a
// command_executed event per spawn. Workers inherit this env, and so do the
// CLI child processes they spawn. Telemetry's own tests delete these vars
// before asserting, so they are unaffected.
env: {
OPENSPEC_TELEMETRY: '0',
DO_NOT_TRACK: '1',
},
// Tests rely on per-file process isolation (e.g., `process.cwd()` assumptions).
pool: 'forks',
maxWorkers: resolveMaxWorkers(),
include: ['test/**/*.test.ts'],
coverage: {
reporter: ['text', 'json', 'html'],
exclude: [
'node_modules/',
'dist/',
'bin/',
'*.config.ts',
'build.js',
'test/**'
]
},
testTimeout: 10000,
hookTimeout: 10000,
teardownTimeout: 3000
}
});