# Ucdavis AI Skills Registry Testing Typescript

> Testing — TypeScript

- Skill: `tomevault-io/ucdavis-ai-skills-registry-testing-typescript` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/ucdavis-ai-skills-registry-testing-typescript`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/ucdavis-ai-skills-registry-testing-typescript/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/ucdavis-ai-skills-registry-testing-typescript

---


# Testing — TypeScript

## Framework
- **Vitest** for new projects (fast, native ESM, Jest-compatible API).
- **Jest** only if already configured — don't mix frameworks.
- Run: `vitest run` / `vitest run --coverage`

## File Conventions
- Co-locate: `src/utils/format.ts` → `src/utils/format.test.ts`
- Shared fixtures: `tests/fixtures/` or `src/__tests__/helpers/`

## Test Structure
```typescript
describe('formatDate', () => {
  it('should return ISO date string when given a valid Date', () => {
    // Arrange
    const date = new Date('2026-01-15');

    // Act
    const result = formatDate(date);

    // Assert
    expect(result).toBe('2026-01-15');
  });
});
```

## Mocking
```typescript
// Module mock — top of file
vi.mock('../services/emailService');

// Spy without full mock
const spy = vi.spyOn(mailer, 'send').mockResolvedValue(undefined);

// Restore after each test
afterEach(() => vi.restoreAllMocks());

// Time control
beforeEach(() => vi.useFakeTimers());
afterEach(() => vi.useRealTimers());
```

## Async Tests
```typescript
// Always await; use assertions count for safety
it('should reject with AuthError when token is expired', async () => {
  expect.assertions(1);
  await expect(verifyToken('expired')).rejects.toThrow('Token expired');
});
```

## Coverage Targets
- Business logic: 85%+ branch coverage.
- Utility functions: 100% line coverage.
- Do not write tests just to hit numbers — test behavior.

---
> Source: [ucdavis/ai-skills-registry](https://github.com/ucdavis/ai-skills-registry) — distributed by [TomeVault](https://tomevault.io).
<!-- tomevault:4.0:skill_md:2026-06-16 -->

