80 lines
3.1 KiB
TypeScript
80 lines
3.1 KiB
TypeScript
import { defineConfig } from 'vitest/config';
|
|
import path from 'path';
|
|
|
|
/**
|
|
* Vitest configuration — split out from `vite.config.ts` (Phase 1d-tests J).
|
|
*
|
|
* `vite.config.ts` no longer owns the `test:` block; vitest auto-loads
|
|
* this file and CI workflows can reference it directly. Defaults below
|
|
* tune for the velxio test suite:
|
|
*
|
|
* - 30 s test timeout: smoke tests iterating 200+ examples need
|
|
* headroom; per-test individual asserts are still fast.
|
|
* - `forks` pool with `singleFork: false` so each test file runs in
|
|
* its own Node worker. The NgSpiceNodeAdapter is a process-wide
|
|
* singleton (emscripten module can't reinitialise); without per-file
|
|
* isolation, state leaks between tests sharing the same worker.
|
|
* - Coverage excludes the WASM bundle (large binary, irrelevant lcov)
|
|
* and the test files themselves.
|
|
*
|
|
* - `resolve.alias` mirrors `vite.config.ts` — vitest's defineConfig
|
|
* does NOT auto-inherit from vite.config.ts, so the @velxio alias
|
|
* used by overlay tests (e.g. pro/.../snapshot.test.ts importing
|
|
* `@velxio/store/useEditorStore`) must be declared here too or
|
|
* test files explode with "Cannot find package '@velxio/...'".
|
|
*/
|
|
export default defineConfig({
|
|
resolve: {
|
|
alias: {
|
|
'@velxio': path.resolve(__dirname, 'src'),
|
|
},
|
|
},
|
|
// Allow vitest to import test files / sources from outside this
|
|
// project root - specifically `../../pro/frontend/src/pro/...` for
|
|
// velxio-prod overlay tests. Without this, Vite's fs sandbox blocks
|
|
// the read with "Cannot find module '/@fs/...'".
|
|
server: { fs: { allow: ['..', '../..'] } },
|
|
test: {
|
|
globals: true,
|
|
environment: 'node',
|
|
include: [
|
|
'src/__tests__/**/*.test.ts',
|
|
'src/**/__tests__/**/*.test.ts',
|
|
// velxio-prod pro overlay tests (when run from a velxio-prod
|
|
// checkout — these are the source-of-truth pro tests, not the
|
|
// stale copies at src/pro/). Harmless on pure-OSS clones
|
|
// because the glob has nothing to match there.
|
|
'../../pro/frontend/src/pro/**/__tests__/**/*.test.ts',
|
|
],
|
|
testTimeout: 30_000,
|
|
hookTimeout: 30_000,
|
|
// Vitest 4 removed `test.poolOptions` — config moved to top-level
|
|
// `forks` / `threads` / etc. See the deprecation banner the runner
|
|
// emits: "DEPRECATED test.poolOptions was removed in Vitest 4. All
|
|
// previous poolOptions are now top-level options."
|
|
//
|
|
// Each forked worker also needs its heap cap raised because the
|
|
// suite leaks state across the 117 test files (ngspice WASM ~30 MB
|
|
// per init, MixedModeScheduler singleton, zustand stores). Even
|
|
// sharded (60 files / shard) the leak overflows Node's 4 GB
|
|
// default; 8 GB plus sharding fits the runner's 16 GB budget.
|
|
forks: {
|
|
singleFork: false,
|
|
execArgv: ['--max-old-space-size=8192'],
|
|
},
|
|
coverage: {
|
|
provider: 'v8',
|
|
include: [
|
|
'src/simulation/**/*.ts',
|
|
'src/utils/exampleTo*.ts',
|
|
],
|
|
exclude: [
|
|
'**/*.test.ts',
|
|
'**/__tests__/**',
|
|
'src/simulation/spice/wasm/**',
|
|
],
|
|
reporter: ['text', 'lcov', 'html'],
|
|
},
|
|
},
|
|
});
|