mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-09-30 12:39:42 +02:00
`npm test` ran config/vitest.config.ts, which includes the browser, visual and
perf suites. On any machine without chromium, a free port and per-machine PNG
baselines that fails ~87 tests on a clean master, so the repo's most obvious
command could not be used as a pass/fail signal. The workaround had spread into
four docs as "never run bare `npm test`" warnings.
`npm test` now runs config/vitest.ci.config.ts — byte-for-byte what CI runs — so
local green means CI green. Verified: 264 files, 5248 tests, exit 0.
The suites it leaves out are not abandoned; each has a command:
test:browser 5 Playwright files (chromium + a live server; codex-predictive-echo
also needs a real codex binary)
test:mobile unchanged — the above plus per-machine PNG baselines
test:perf 2 wall-clock benchmarks; need an otherwise idle machine
test:all the old everything-behaviour, kept reachable
test:ci is untouched (CI still calls it). test:watch and test:coverage follow
test onto the gate's config.
The more important half is the hole this closes. The exclusion list lived as
literals in one config and pointed one way only: a file excluded from CI and
added to no runner would be tested by NOTHING, silently, with every command
still green — vitest counts "no files matched a filter" as success. That is the
same shape as the #279/#280 blind spot already documented in CLAUDE.md.
So the globs moved to config/test-suites.ts, one array per REASON a suite cannot
run in CI, and all three configs derive from it. test/test-suite-partition.test.ts
then checks the arithmetic against the files on disk: it fails if any test file
is reachable by no runner, or by two. Confirmed it fires by orphaning a file and
watching it name it. The partition is exact today:
gate 264 + browser 5 + perf 2 + mobile 9 = 280 = every *.test.ts in the repo
⚠️ One sharp edge, deliberate and documented: a file filter must match its
runner. `npm test -- test/mobile/keyboard.test.ts` now matches nothing and exits
GREEN having run zero tests, because the gate's config excludes that path.
CLAUDE.md recommended exactly that command in the on-screen-keyboard note; that
line now says `npm run test:mobile -- <file>`, and the Testing section calls out
the trap, since a green run of zero tests is worse than a red one.
Docs synced: CLAUDE.md, AGENTS.md, .github/CONTRIBUTING.md, README.md,
README.zh-CN.md, and two ci.yml comments that claimed only test/mobile/** was
excluded — it is three suites, and 5 Playwright files rather than 3.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
38 lines
1.4 KiB
TypeScript
38 lines
1.4 KiB
TypeScript
import { resolve } from 'node:path';
|
|
import { defineConfig } from 'vitest/config';
|
|
|
|
const root = resolve(import.meta.dirname, '..');
|
|
|
|
/**
|
|
* EVERY test in the repo, including the ones that cannot pass on an arbitrary
|
|
* machine — `npm run test:all`. Reach for it when you want the complete picture
|
|
* and are prepared to read past environmental failures.
|
|
*
|
|
* This is NOT what `npm test` runs. On a machine without chromium, a free port
|
|
* or per-machine PNG baselines this config fails ~87 tests on a clean master,
|
|
* which makes it useless as a pass/fail signal: the default gate is
|
|
* config/vitest.ci.config.ts, and the suites it leaves out each have their own
|
|
* runner (`test:browser`, `test:perf`, `test:mobile`). See config/test-suites.ts.
|
|
*/
|
|
export default defineConfig({
|
|
test: {
|
|
root,
|
|
globals: true,
|
|
environment: 'node',
|
|
include: ['test/**/*.test.ts'],
|
|
setupFiles: ['./test/setup.ts'],
|
|
// Run test files sequentially to respect mux session limits
|
|
// Individual tests within files still run in parallel where safe
|
|
fileParallelism: false,
|
|
coverage: {
|
|
provider: 'v8',
|
|
reporter: ['text', 'json', 'html'],
|
|
include: ['src/**/*.ts'],
|
|
exclude: ['src/index.ts', 'src/cli.ts'],
|
|
},
|
|
testTimeout: 30000, // 30 seconds for integration tests
|
|
// Ensure cleanup runs even on test failures
|
|
teardownTimeout: 60000,
|
|
},
|
|
});
|