Back to list
ShunsukeHayashi

test-generator

by ShunsukeHayashi

🤖 First open-source, economically-governed, beginner-friendly autonomous development framework built on Issue-Driven Development | 超初心者でも使える自律型開発フレームワーク

13🍴 8📅 Jan 24, 2026

SKILL.md


name: test-generator description: Generate comprehensive unit tests for code. Use when creating tests, improving test coverage, or setting up testing frameworks. allowed-tools: Bash, Read, Write, Grep, Glob

Test Generator

Version: 1.0.0 Purpose: Generate comprehensive tests with high coverage


Triggers

TriggerExamples
Test creation"write tests", "テスト作成", "add unit tests"
Coverage"improve coverage", "カバレッジ向上"
TDD"test first", "TDDで"

Testing Stack

FrameworkPurpose
VitestUnit/Integration tests
PlaywrightE2E tests
Testing LibraryComponent 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);
});

2. 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);
});

3. 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);
});

4. 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

MetricTarget
Statements80%
Branches80%
Functions80%
Lines80%
# 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

Score

Total Score

75/100

Based on repository quality metrics

SKILL.md

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

+20
LICENSE

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

+10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

0/15
最近の活動

1ヶ月以内に更新

+10
フォーク

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

0/5
Issue管理

オープンIssueが50未満

+5
言語

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

+5
タグ

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

+5

Reviews

💬

Reviews coming soon