Agent skill

testing-patterns

Vitest testing patterns and strategies for unit tests, agent tests, and API tests with Supabase mocking

Stars 232
Forks 15

Install this agent skill to your Project

npx add-skill https://github.com/aiskillstore/marketplace/tree/main/skills/cleanexpo/testing-patterns

SKILL.md

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

typescript
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

typescript
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

typescript
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

typescript
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

Expand your agent's capabilities with these related and highly-rated skills.

aiskillstore/marketplace

perigon-backend

Perigon ASP.NET Core + EF Core + Aspire conventions

232 15
Explore
aiskillstore/marketplace

perigon-agent

Pointers for Copilot/agents to apply Perigon conventions

232 15
Explore
aiskillstore/marketplace

perigon-angular

Angular 21+ standalone/Material/signal conventions for Perigon WebApp

232 15
Explore
aiskillstore/marketplace

fastapi-mastery

Comprehensive FastAPI development skill covering REST API creation, routing, request/response handling, validation, authentication, database integration, middleware, and deployment. Use when working with FastAPI projects, building APIs, implementing CRUD operations, setting up authentication/authorization, integrating databases (SQL/NoSQL), adding middleware, handling WebSockets, or deploying FastAPI applications. Triggered by requests involving .py files with FastAPI code, API endpoint creation, Pydantic models, or FastAPI-specific features.

232 15
Explore
aiskillstore/marketplace

context7-efficient

Token-efficient library documentation fetcher using Context7 MCP with 86.8% token savings through intelligent shell pipeline filtering. Fetches code examples, API references, and best practices for JavaScript, Python, Go, Rust, and other libraries. Use when users ask about library documentation, need code examples, want API usage patterns, are learning a new framework, need syntax reference, or troubleshooting with library-specific information. Triggers include questions like "Show me React hooks", "How do I use Prisma", "What's the Next.js routing syntax", or any request for library/framework documentation.

232 15
Explore
aiskillstore/marketplace

browser-use

Browser automation using Playwright MCP. Navigate websites, fill forms, click elements, take screenshots, and extract data. Use when tasks require web browsing, form submission, web scraping, UI testing, or any browser interaction.

232 15
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results