Skip to content

Testing

Kangentic uses a three-tier testing strategy. Each tier targets a different layer of the application, and each has its own tradeoffs between speed, coverage, and realism.

Terminal window
npm run test:unit
  • Runner: Vitest
  • Speed: Sub-second
  • What to test: Pure logic — parsers, filters, state machines, utility functions
  • No build needed, no browser, no Electron

Unit tests live in tests/unit/. They’re fast and focused — test a function’s input/output without any framework overhead.

Terminal window
npx playwright test --project=ui
  • Runner: Playwright with headless Chromium
  • Speed: ~240 tests across 24 spec files
  • What to test: React components, forms, dialogs, drag-and-drop, board interactions
  • No build needed — runs against the Vite dev server (auto-started by Playwright)

UI tests live in tests/ui/. They use a full in-memory mock of window.electronAPI (injected via addInitScript()) that supports complete CRUD for projects, tasks, swimlanes, actions, sessions, config, and attachments.

Use window.__mockPreConfigure(fn) to set up mock state before React mounts.

Terminal window
npm run build
npx playwright test --project=electron
  • Runner: Playwright with _electron.launch()
  • Speed: Slower — opens real windows (no headless mode on Windows)
  • What to test: PTY sessions, terminal rendering, session lifecycle, shell detection, config persistence
  • Build required before running

E2E tests live in tests/e2e/. These exercise the full Electron application with real IPC, real file I/O, and real terminal sessions.

What you’re testingTier
Pure function, parser, utilityUnit
Component rendering, user interaction, form validationUI
Real IPC, PTY spawning, terminal output, file I/OE2E
Terminal window
npm run test:unit # Unit tests (Vitest)
npx playwright test # UI + E2E tests (Playwright)