test-generator

Version: 1.0.0 Purpose: Generate comprehensive tests with high coverage

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "test-generator" with this command: npx skills add shunsukehayashi/miyabi/shunsukehayashi-miyabi-test-generator

Test Generator

Version: 1.0.0 Purpose: Generate comprehensive tests with high coverage

Triggers

Trigger Examples

Test creation "write tests", "テスト作成", "add unit tests"

Coverage "improve coverage", "カバレッジ向上"

TDD "test first", "TDDで"

Testing Stack

Framework Purpose

Vitest Unit/Integration tests

Playwright E2E tests

Testing Library Component tests

Test Structure (AAA Pattern)

describe('functionName', () => { it('should [expected behavior] when [condition]', () => { // Arrange const input = createTestInput();

// Act
const result = functionName(input);

// Assert
expect(result).toBe(expectedValue);

}); });

Test Categories

  1. Happy Path

it('should return sum when given valid numbers', () => { expect(add(2, 3)).toBe(5); });

  1. Edge Cases

it('should handle empty array', () => { expect(sum([])).toBe(0); });

it('should handle single element', () => { expect(sum([5])).toBe(5); });

it('should handle negative numbers', () => { expect(sum([-1, 1])).toBe(0); });

  1. Error Cases

it('should throw on invalid input', () => { expect(() => divide(10, 0)).toThrow('Division by zero'); });

it('should throw on null input', () => { expect(() => process(null)).toThrow(TypeError); });

  1. Async Tests

it('should fetch user data', async () => { const user = await fetchUser(1); expect(user.name).toBe('John'); });

it('should handle API errors', async () => { await expect(fetchUser(-1)).rejects.toThrow('Not found'); });

Mocking

Mock Functions

import { vi } from 'vitest';

const mockFn = vi.fn(); mockFn.mockReturnValue(42); mockFn.mockResolvedValue({ data: 'test' });

Mock Modules

vi.mock('./database', () => ({ query: vi.fn().mockResolvedValue([{ id: 1 }]), }));

Spies

const spy = vi.spyOn(console, 'log'); doSomething(); expect(spy).toHaveBeenCalledWith('expected message');

Coverage Requirements

Metric Target

Statements 80%

Branches 80%

Functions 80%

Lines 80%

Run with coverage

npm test -- --coverage

Test File Naming

src/ ├── utils/ │ ├── helper.ts │ └── helper.test.ts # Co-located └── tests/ └── integration.test.ts # Integration tests

Template

import { describe, it, expect, beforeEach, vi } from 'vitest'; import { functionName } from './module';

describe('functionName', () => { beforeEach(() => { vi.clearAllMocks(); });

describe('when input is valid', () => { it('should return expected result', () => { // Arrange const input = { /* ... */ };

  // Act
  const result = functionName(input);

  // Assert
  expect(result).toEqual(expected);
});

});

describe('when input is invalid', () => { it('should throw error', () => { expect(() => functionName(null)).toThrow(); }); });

describe('edge cases', () => { it.each([ [[], 0], [[1], 1], [[1, 2], 3], ])('sum(%j) = %i', (input, expected) => { expect(sum(input)).toBe(expected); }); }); });

Checklist

  • All public functions have tests

  • Happy path covered

  • Edge cases covered

  • Error cases covered

  • Async behavior tested

  • Mocks properly cleaned up

  • Coverage meets threshold

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

ccg

No summary provided by upstream source.

Repository SourceNeeds Review
General

skill-creator

No summary provided by upstream source.

Repository SourceNeeds Review
General

refactor-helper

No summary provided by upstream source.

Repository SourceNeeds Review
General

teachable-course-creator

No summary provided by upstream source.

Repository SourceNeeds Review