Agent SkillsAgent Skills
captjay98

Vitest Patterns

@captjay98/Vitest Patterns
captjay98
0
0 forks
Updated 5/5/2026
View on GitHub

Unit testing patterns with Vitest in LivestockAI

Installation

$npx agent-skills-cli install @captjay98/Vitest Patterns
Claude Code
Cursor
Copilot
Codex
Antigravity

Details

Path.kiro/skills/vitest-patterns/SKILL.md
Branchmain
Scoped Name@captjay98/Vitest Patterns

Usage

After installing, this skill will be available to your AI coding assistant.

Verify installation:

npx agent-skills-cli list

Skill Instructions


name: Vitest Patterns description: Unit testing patterns with Vitest in LivestockAI

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 tests
  • integration-testing - Database tests
  • three-layer-architecture - Service layer testing