vitest-testing
SKILL.md
Vitest Testing
Test File Placement
| Source location | Test location |
|---|---|
app/composables/<name>.ts |
tests/app/composables/<name>.test.ts |
app/components/<Name>.vue |
app/components/__tests__/<Name>.test.ts (DOM tests) OR tests/app/components/<Name>.test.ts (logic-only) |
app/utils/<name>.ts |
tests/app/utils/<name>.test.ts |
services/<name>.ts |
tests/services/<name>.test.ts |
utils/<name>.ts |
tests/utils/<name>.test.ts |
terraform/lambda/src/<Name>/index.ts |
terraform/lambda/src/<Name>/__tests__/index.test.ts |
Use __tests__/ co-location only for component DOM tests and Lambda handlers. Everything else goes in the top-level tests/ mirror tree.
Environment Selection
- Default:
node(composables, services, utils, Lambda handlers) - DOM tests only: Add
/** @vitest-environment happy-dom */as the first line of the test file - Never change
vitest.config.tsenvironment globally
Test Writing Rules
- Imports — always explicit:
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' - Nuxt auto-imports — call
mockNuxtImports()fromtests/helpersinbeforeEachfor any code usinguseRuntimeConfig,useState,computed,ref,watch,onMounted,onUnmounted,navigateTo - Naming — always
*.test.ts, never*.spec.ts - Timers — use
vi.useFakeTimers()inbeforeEachandvi.useRealTimers()inafterEachfor async/timer tests - Console noise — suppress with
vi.spyOn(console, 'log').mockImplementation(() => {})inbeforeEach - Logic extraction — prefer testing extracted logic over DOM rendering; test behavior, not templates
- Component DOM tests — use
@vue/test-utilsmount()with stubbed Nuxt UI components - AWS service mocks — use
mockSend+vi.mock('@aws-sdk/...')pattern (seereferences/testing-patterns.md)
What to Test (per code type)
- Composables: return values, state mutations, reactive updates, edge cases
- Components: props, emits, slot rendering, conditional rendering (via logic extraction where possible)
- Services: success path, error handling (custom error classes), edge cases (empty input, missing fields)
- Utils: pure function I/O, boundary conditions
- Lambda handlers: each resolver action, valid/invalid input, DynamoDB mock responses, error paths
Running Tests
bun run test # Single run
bun run test:watch # Watch mode
bun run test:coverage # With v8 coverage report
Coverage
Coverage uses @vitest/coverage-v8. Config is in vitest.config.ts. Thresholds: lines 80%, functions 80%, branches 70%, statements 80%.
Reference
Read references/testing-patterns.md for detailed mock patterns, full templates, and real codebase examples.
Weekly Installs
15
Repository
ralphcrisostomo…t-skillsFirst Seen
8 days ago
Security Audits
Installed on
github-copilot15
codex15
kimi-cli15
amp15
cline15
gemini-cli15