Agent skill
Vitest Patterns
Unit testing patterns with Vitest in LivestockAI
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/vitest-patterns
SKILL.md
Vitest Patterns
LivestockAI uses Vitest for fast unit testing with TypeScript support.
Running Tests
# Run unit tests (IMPORTANT: use "bun run test" not "bun test")
bun run test
# Run specific file
bun run test tests/features/batches/batches.property.test.ts
# Run with coverage
bun run test:coverage
# Run integration tests
bun run test:integration
# Run all tests
bun run test:all
Note: bun run test uses Vitest (respects config), while bun test uses Bun's built-in runner (ignores Vitest config).
Test File Organization
tests/
├── features/ # Feature tests
│ ├── batches/
│ │ ├── batches.property.test.ts
│ │ └── batches.test.ts
│ └── sales/
├── integration/ # Database tests
│ └── batches.integration.test.ts
├── components/ # Component tests
└── helpers/ # Test utilities
├── db-integration.ts
└── db-mock.ts
Test Naming
- Unit tests:
feature.test.ts - Property tests:
feature.property.test.ts - Integration tests:
feature.integration.test.ts
Basic Test Structure
import { describe, it, expect, beforeEach, afterEach } from 'vitest'
describe('calculateFCR', () => {
it('returns correct FCR for valid inputs', () => {
expect(calculateFCR(150, 100)).toBe(1.5)
})
it('returns null for zero weight gain', () => {
expect(calculateFCR(150, 0)).toBeNull()
})
it('returns null for negative inputs', () => {
expect(calculateFCR(-150, 100)).toBeNull()
})
})
Mocking
import { vi } from 'vitest'
// Mock a module
vi.mock('~/lib/db', () => ({
getDb: vi.fn().mockResolvedValue(mockDb),
}))
// Mock a function
const mockFn = vi.fn().mockReturnValue('result')
// Spy on a function
const spy = vi.spyOn(module, 'function')
Testing Service Layer
Service functions are pure and easy to test:
import { calculateBatchTotalCost, validateBatchData } from './service'
describe('calculateBatchTotalCost', () => {
it('multiplies quantity by cost', () => {
expect(calculateBatchTotalCost(100, 5.5)).toBe('550.00')
})
it('returns zero for invalid inputs', () => {
expect(calculateBatchTotalCost(0, 5.5)).toBe('0.00')
expect(calculateBatchTotalCost(100, -5)).toBe('0.00')
})
})
Coverage Requirements
- Minimum 80% for business logic
- 100% for financial calculations
- Critical path testing for offline functionality
Related Skills
property-testing- Property-based testsintegration-testing- Database teststhree-layer-architecture- Service layer testing
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?