Back to list
aiskillstore

testing-patterns

by aiskillstore

Security-audited skills for Claude, Codex & Claude Code. One-click install, quality verified.

102🍴 3📅 Jan 23, 2026

SKILL.md


name: testing-patterns description: Vitest testing patterns and strategies for unit tests, agent tests, and API tests with Supabase mocking

Testing Patterns Skill

Vitest Testing Strategy

When to Use: Writing tests for new features, agents, API routes


Framework: Vitest

Command: npm run test Required: 100% pass rate Location: tests/ directory


Unit Test Pattern

import { describe, it, expect, vi, beforeEach } from 'vitest';
import { MyService } from '@/lib/services/my-service';

describe('MyService', () => {
  let service: MyService;

  beforeEach(() => {
    vi.clearAllMocks();
    service = new MyService();
  });

  it('should process data correctly', () => {
    const input = { value: 42 };
    const result = service.process(input);

    expect(result).toBeDefined();
    expect(result.value).toBe(42);
  });

  it('should handle errors', () => {
    expect(() => service.process(null)).toThrow();
  });
});

Agent Test Pattern

import { describe, it, expect, vi } from 'vitest';
import { MyAgent } from '@/lib/agents/my-agent';

// Mock Supabase
vi.mock('@supabase/supabase-js', () => ({
  createClient: vi.fn(() => ({
    from: vi.fn(() => ({
      select: vi.fn().mockReturnThis(),
      eq: vi.fn().mockResolvedValue({ data: [], error: null })
    }))
  }))
}));

describe('MyAgent', () => {
  it('processes task successfully', async () => {
    const agent = new MyAgent();
    const task = {
      id: 'test-1',
      workspace_id: 'ws-123',
      task_type: 'test',
      payload: {},
      priority: 5,
      retry_count: 0,
      max_retries: 3
    };

    const result = await agent.processTask(task);

    expect(result).toBeDefined();
  });
});

API Test Pattern

import { describe, it, expect } from 'vitest';
import { GET } from '@/app/api/my-endpoint/route';
import { NextRequest } from 'next/server';

describe('GET /api/my-endpoint', () => {
  it('requires workspace_id', async () => {
    const req = new NextRequest('http://localhost:3008/api/my-endpoint');

    const response = await GET(req);
    const data = await response.json();

    expect(response.status).toBe(400);
    expect(data.error).toContain('workspaceId required');
  });
});

Mocking Supabase

const mockSelect = vi.fn().mockReturnThis();
const mockEq = vi.fn().mockReturnThis();
const mockInsert = vi.fn().mockReturnThis();
const mockFrom = vi.fn(() => ({
  select: mockSelect,
  eq: mockEq,
  insert: mockInsert
}));

vi.mock('@supabase/supabase-js', () => ({
  createClient: vi.fn(() => ({
    from: mockFrom
  }))
}));

// Set return values
mockEq.mockResolvedValue({ data: [{ id: '1', name: 'Test' }], error: null });

Coverage Requirements

  • Unit Tests: All services, utilities, helpers
  • Integration Tests: API routes, agent workflows
  • E2E Tests: Critical user flows (Playwright)

Target: 100% pass rate (no failures allowed)


Standard: All code must have tests, all tests must pass

Score

Total Score

60/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

+5
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon