Files
web-terminal/vitest.config.ts
Yaojia Wang 57725f7ef2 test: fix pre-existing failures — localStorage polyfill + prefs shape drift
- jsdom 29's localStorage methods are undefined under this vitest config, so
  every frontend test calling localStorage.clear()/setItem() threw. Add a
  shared in-memory Web Storage polyfill via setupFiles (no-op when a working
  Storage exists / in node env). Fixes quick-reply, push, projects-panel (135 tests).
- Update desktop prefs test: defaultPrefs gained remoteHosts/selectedHostId
  (remote-host mTLS work); sync EXPECTED_DEFAULTS and the round-trip fixture.

Full suite now green: 1473 passed (was 142 failing).
2026-07-07 21:09:49 +02:00

55 lines
2.2 KiB
TypeScript

import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
include: ['test/**/*.test.ts'],
environment: 'node',
// jsdom 29's localStorage methods are undefined under this config; a shared
// in-memory Web Storage polyfill fixes the frontend (@vitest-environment
// jsdom) tests that call localStorage.clear()/setItem(). No-op in node env.
setupFiles: ['test/setup/local-storage.ts'],
// Scaffold has no tests yet; don't fail the script until modules add theirs.
passWithNoTests: true,
// Coverage target is the global 80% rule; enforced with `--coverage`.
// Scope: all backend src/** (the review's core), plus the frontend modules
// that carry real logic and have unit tests. The remaining public/*.ts are
// thin DOM-wiring / entry-point glue (main.ts boots the app; dashboard/qr/
// share/shortcuts/search/keybar/settings/history just build + wire DOM) with
// no branch logic worth unit-testing in this fix-pass — excluded so the
// threshold measures tested surface, not untestable wiring. (Browser-driven
// E2E, not unit tests, is the right tool for those.)
coverage: {
provider: 'v8',
include: [
'src/**/*.ts',
'public/terminal-session.ts',
'public/tabs.ts',
'public/preview-grid.ts',
'public/title-util.ts',
'public/voice-commands.ts',
'public/voice-confirm.ts',
// Desktop (Electron) shell: only the PURE logic modules are measured.
// The Electron glue (main/window/tray/menu/notifications/preload/
// embedded-server/settings-store) is thin, side-effectful wiring around
// the electron/native/dist APIs — untestable as a unit and excluded on
// the same principle as the thin DOM-wiring public/*.ts above.
'desktop/src/port.ts',
'desktop/src/shell.ts',
'desktop/src/server-config.ts',
'desktop/src/deep-link.ts',
'desktop/src/notify-policy.ts',
'desktop/src/notifications.ts',
'desktop/src/live-poll.ts',
'desktop/src/prefs.ts',
'desktop/src/settings-store.ts',
],
thresholds: {
lines: 80,
functions: 80,
branches: 80,
statements: 80,
},
},
},
})