Test Strategy
Also available: Markdown · Plain text
Test Strategy — Gnomad Webcanvas
Version: 0.1.0-beta.2
Last updated: June 2026
Overview
Testing layers progress from fast automated checks to manual cross-platform QA before release.
Unit tests (Vitest) → 19 tests — parseHtmlFile, shareUrl, assembleSource
Type check + lint → every commit / pre-release
Production build → pre-release
Manual QA checklist → every release
Layer 1 — Static analysis (current)
npm run lint # ESLint
npx tsc -b --noEmit # TypeScript strict
npm run test # Vitest unit tests (19 tests)
Covers: Type errors, unused imports, React hooks rules, parser/share/assembler behavior.
Layer 2 — Unit tests ✓
Framework: Vitest + jsdom
Implemented suites (src/utils/__tests__/):
| Module | Cases |
|---|---|
parseHtmlFile.ts |
DOMParser extraction, multiple style/script tags, round-trip, edge cases |
shareUrl.ts |
LZ encode/decode round-trip, optional fields, invalid hash, unicode |
assembleSource.ts |
CDN injection, Google Fonts, deduplication, runtime error wrapper |
npm run test # single run
npm run test:watch # watch mode
Layer 3 — Integration / E2E (planned)
| Tool | Scope |
|---|---|
| Playwright | Web mode: edit → preview update → export |
| Tauri WebDriver | Desktop: open/save dialogs (headless limited) |
Not in v0.1 scope — manual QA covers critical paths.
Layer 4 — Manual QA
QA_CHECKLIST.md — required before every tagged release.
Minimum smoke (5 min) documented in checklist.
Layer 5 — Rust backend
Current Rust surface is plugin-only (no custom commands).
cd src-tauri && cargo check && cargo test
Add command-specific tests when custom #[tauri::command] handlers land.
CI gates
| Trigger | Checks |
|---|---|
| PR / push (future) | lint, tsc, build |
Tag v* |
Full Tauri matrix build |
Release workflow (.github/workflows/release.yml) does not yet run lint — add a build.yml for PR gates.
Coverage goals (v1.0)
| Area | Target | Status |
|---|---|---|
Pure utils (assembleSource, shareUrl, parseHtmlFile) |
80%+ | ✓ 19 tests shipped |
| Zustand store actions | Key paths covered | Planned |
| React components | Smoke E2E only | Planned (Playwright) |
| Rust commands | Per-command when added | N/A (no custom commands) |
Built with ❤️ by Gnomad Studio 🦙