Agent skill

TDD Workflow

by affaan-m in affaan-m/ECC

새 기능 작성, 버그 수정 또는 코드 리팩터링 시 이 스킬을 사용하세요. An agent skill from affaan-m/ECC.

MITAuto-check passedTesting & QA

Install TDD Workflow

skills CLI
$ npx skills add affaan-m/ECC --skill tdd-workflow -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install affaan-m/ECC tdd-workflow --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .claude/skills && cp -r skills-src/docs/ko-KR/skills/tdd-workflow .claude/skills/tdd-workflow && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
tdd-workflow
GitHub stars
276k
Used in
2 other repos
Token cost
~2.1k tokens
SKILL.md length
376 words
Files
1
Skills in repo
683
Repo updated
First seen
Licence
MIT

At a glance

새 기능 작성, 버그 수정 또는 코드 리팩터링 시 이 스킬을 사용하세요. An agent skill from affaan-m/ECC.

  • Works in 3 steps: 코드보다 테스트가 먼저 → 커버리지 요구 사항 → 테스트 유형
  • Tasks that involve Test-driven development
  • SKILL.md covers 활성화 시점, 핵심 원칙, TDD 워크플로우 단계 and 테스트 패턴, plus 4 more sections
  • Calls npm

What it does

TDD Workflow is an agent skill from affaan-m/ECC. 새 기능 작성, 버그 수정 또는 코드 리팩터링 시 이 스킬을 사용하세요. 단위, 통합, E2E 테스트를 포함한 80% 이상의 커버리지로 테스트 주도 개발을 시행합니다.

Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering Test-driven development, End-to-end testing and Unit testing. The repository describes itself as: The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond. The licence is MIT.

When your agent uses it

  • Tasks that involve Test-driven development
  • Tasks that involve End-to-end testing
  • Tasks that involve Unit testing

Example prompts

  • “/tdd-workflow”

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. 코드보다 테스트가 먼저
  2. 커버리지 요구 사항
  3. 테스트 유형

What it can do on your machine

Read from SKILL.md and the folder at commit 4eb71d9. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

TDD Workflow loads about 2.1k tokens when it runs. Until then it costs about 27 tokens; SKILL.md has 376 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~27
When it runs · the whole SKILL.md, loaded when a task matches
~2.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from affaan-m/ECC at commit 4eb71d9, republished under its MIT licence (© affaan-m). 376 words, ~2,114 tokens.

Download SKILL.mdSave it as .claude/skills/tdd-workflow/SKILL.md (or your agent's skills folder).
name
tdd-workflow
description
새 기능 작성, 버그 수정 또는 코드 리팩터링 시 이 스킬을 사용하세요. 단위, 통합, E2E 테스트를 포함한 80% 이상의 커버리지로 테스트 주도 개발을 시행합니다.
origin
ECC

테스트 주도 개발 워크플로우

이 스킬은 모든 코드 개발이 포괄적인 테스트 커버리지와 함께 TDD 원칙을 따르도록 보장합니다.

활성화 시점

  • 새 기능이나 기능성을 작성할 때
  • 버그나 이슈를 수정할 때
  • 기존 코드를 리팩터링할 때
  • API 엔드포인트를 추가할 때
  • 새 컴포넌트를 생성할 때

핵심 원칙

1. 코드보다 테스트가 먼저

항상 테스트를 먼저 작성한 후, 테스트를 통과시키는 코드를 구현합니다.

2. 커버리지 요구 사항
  • 최소 80% 커버리지 (단위 + 통합 + E2E)
  • 모든 엣지 케이스 커버
  • 에러 시나리오 테스트
  • 경계 조건 검증
3. 테스트 유형
단위 테스트
  • 개별 함수 및 유틸리티
  • 컴포넌트 로직
  • 순수 함수
  • 헬퍼 및 유틸리티
통합 테스트
  • API 엔드포인트
  • 데이터베이스 작업
  • 서비스 상호작용
  • 외부 API 호출
E2E 테스트 (Playwright)
  • 핵심 사용자 플로우
  • 완전한 워크플로우
  • 브라우저 자동화
  • UI 상호작용

TDD 워크플로우 단계

단계 1: 사용자 여정 작성
As a [role], I want to [action], so that [benefit]

Example:
As a user, I want to search for markets semantically,
so that I can find relevant markets even without exact keywords.
단계 2: 테스트 케이스 생성

각 사용자 여정에 대해 포괄적인 테스트 케이스를 작성합니다:

typescript
describe('Semantic Search', () => {
  it('returns relevant markets for query', async () => {
    // Test implementation
  })

  it('handles empty query gracefully', async () => {
    // Test edge case
  })

  it('falls back to substring search when Redis unavailable', async () => {
    // Test fallback behavior
  })

  it('sorts results by similarity score', async () => {
    // Test sorting logic
  })
})
단계 3: 테스트 실행 (실패해야 함)
bash
npm test
# Tests should fail - we haven't implemented yet
단계 4: 코드 구현

테스트를 통과시키기 위한 최소한의 코드를 작성합니다:

typescript
// Implementation guided by tests
export async function searchMarkets(query: string) {
  // Implementation here
}
단계 5: 테스트 재실행
bash
npm test
# Tests should now pass
단계 6: 리팩터링

테스트가 통과하는 상태를 유지하면서 코드 품질을 개선합니다:

  • 중복 제거
  • 네이밍 개선
  • 성능 최적화
  • 가독성 향상
단계 7: 커버리지 확인
bash
npm run test:coverage
# Verify 80%+ coverage achieved

테스트 패턴

단위 테스트 패턴 (Jest/Vitest)
typescript
import { render, screen, fireEvent } from '@testing-library/react'
import { Button } from './Button'

describe('Button Component', () => {
  it('renders with correct text', () => {
    render(<Button>Click me</Button>)
    expect(screen.getByText('Click me')).toBeInTheDocument()
  })

  it('calls onClick when clicked', () => {
    const handleClick = jest.fn()
    render(<Button onClick={handleClick}>Click</Button>)

    fireEvent.click(screen.getByRole('button'))

    expect(handleClick).toHaveBeenCalledTimes(1)
  })

  it('is disabled when disabled prop is true', () => {
    render(<Button disabled>Click</Button>)
    expect(screen.getByRole('button')).toBeDisabled()
  })
})
API 통합 테스트 패턴
typescript
import { NextRequest } from 'next/server'
import { GET } from './route'

describe('GET /api/markets', () => {
  it('returns markets successfully', async () => {
    const request = new NextRequest('http://localhost/api/markets')
    const response = await GET(request)
    const data = await response.json()

    expect(response.status).toBe(200)
    expect(data.success).toBe(true)
    expect(Array.isArray(data.data)).toBe(true)
  })

  it('validates query parameters', async () => {
    const request = new NextRequest('http://localhost/api/markets?limit=invalid')
    const response = await GET(request)

    expect(response.status).toBe(400)
  })

  it('handles database errors gracefully', async () => {
    // Mock database failure
    const request = new NextRequest('http://localhost/api/markets')
    // Test error handling
  })
})
E2E 테스트 패턴 (Playwright)
typescript
import { test, expect } from '@playwright/test'

test('user can search and filter markets', async ({ page }) => {
  // Navigate to markets page
  await page.goto('/')
  await page.click('a[href="/markets"]')

  // Verify page loaded
  await expect(page.locator('h1')).toContainText('Markets')

  // Search for markets
  await page.fill('input[placeholder="Search markets"]', 'election')

  // Wait for stable search results instead of sleeping
  const results = page.locator('[data-testid="market-card"]')
  await expect(results.first()).toBeVisible({ timeout: 5000 })
  await expect(results).toHaveCount(5, { timeout: 5000 })

  // Verify results contain search term
  const firstResult = results.first()
  await expect(firstResult).toContainText('election', { ignoreCase: true })

  // Filter by status
  await page.click('button:has-text("Active")')

  // Verify filtered results
  await expect(results).toHaveCount(3)
})

test('user can create a new market', async ({ page }) => {
  // Login first
  await page.goto('/creator-dashboard')

  // Fill market creation form
  await page.fill('input[name="name"]', 'Test Market')
  await page.fill('textarea[name="description"]', 'Test description')
  await page.fill('input[name="endDate"]', '2025-12-31')

  // Submit form
  await page.click('button[type="submit"]')

  // Verify success message
  await expect(page.locator('text=Market created successfully')).toBeVisible()

  // Verify redirect to market page
  await expect(page).toHaveURL(/\/markets\/test-market/)
})

테스트 파일 구성

src/
├── components/
│   ├── Button/
│   │   ├── Button.tsx
│   │   ├── Button.test.tsx          # Unit tests
│   │   └── Button.stories.tsx       # Storybook
│   └── MarketCard/
│       ├── MarketCard.tsx
│       └── MarketCard.test.tsx
├── app/
│   └── api/
│       └── markets/
│           ├── route.ts
│           └── route.test.ts         # Integration tests
└── e2e/
    ├── markets.spec.ts               # E2E tests
    ├── trading.spec.ts
    └── auth.spec.ts

외부 서비스 모킹

Supabase Mock
typescript
jest.mock('@/lib/supabase', () => ({
  supabase: {
    from: jest.fn(() => ({
      select: jest.fn(() => ({
        eq: jest.fn(() => Promise.resolve({
          data: [{ id: 1, name: 'Test Market' }],
          error: null
        }))
      }))
    }))
  }
}))
Redis Mock
typescript
jest.mock('@/lib/redis', () => ({
  searchMarketsByVector: jest.fn(() => Promise.resolve([
    { slug: 'test-market', similarity_score: 0.95 }
  ])),
  checkRedisHealth: jest.fn(() => Promise.resolve({ connected: true }))
}))
OpenAI Mock
typescript
jest.mock('@/lib/openai', () => ({
  generateEmbedding: jest.fn(() => Promise.resolve(
    new Array(1536).fill(0.1) // Mock 1536-dim embedding
  ))
}))

테스트 커버리지 검증

커버리지 리포트 실행
bash
npm run test:coverage
커버리지 임계값
json
{
  "jest": {
    "coverageThreshold": {
      "global": {
        "branches": 80,
        "functions": 80,
        "lines": 80,
        "statements": 80
      }
    }
  }
}

흔한 테스트 실수

잘못된 예: 구현 세부사항 테스트
typescript
// Don't test internal state
expect(component.state.count).toBe(5)
올바른 예: 사용자에게 보이는 동작 테스트
typescript
// Test what users see
expect(screen.getByText('Count: 5')).toBeInTheDocument()
Show full SKILL.md (151 more words)Show less
잘못된 예: 취약한 셀렉터
typescript
// Breaks easily
await page.click('.css-class-xyz')
올바른 예: 시맨틱 셀렉터
typescript
// Resilient to changes
await page.click('button:has-text("Submit")')
await page.click('[data-testid="submit-button"]')
잘못된 예: 테스트 격리 없음
typescript
// Tests depend on each other
test('creates user', () => { /* ... */ })
test('updates same user', () => { /* depends on previous test */ })
올바른 예: 독립적인 테스트
typescript
// Each test sets up its own data
test('creates user', () => {
  const user = createTestUser()
  // Test logic
})

test('updates user', () => {
  const user = createTestUser()
  // Update logic
})

지속적 테스트

개발 중 Watch 모드
bash
npm test -- --watch
# Tests run automatically on file changes
Pre-Commit Hook
bash
# Runs before every commit
npm test && npm run lint
CI/CD 통합
yaml
# GitHub Actions
- name: Run Tests
  run: npm test -- --coverage
- name: Upload Coverage
  uses: codecov/codecov-action@v3

모범 사례

  1. 테스트 먼저 작성 - 항상 TDD
  2. 테스트당 하나의 Assert - 단일 동작에 집중
  3. 설명적인 테스트 이름 - 무엇을 테스트하는지 설명
  4. Arrange-Act-Assert - 명확한 테스트 구조
  5. 외부 의존성 모킹 - 단위 테스트 격리
  6. 엣지 케이스 테스트 - null, undefined, 빈 값, 큰 값
  7. 에러 경로 테스트 - 정상 경로만이 아닌
  8. 테스트 속도 유지 - 단위 테스트 각 50ms 미만
  9. 테스트 후 정리 - 부작용 없음
  10. 커버리지 리포트 검토 - 누락 부분 식별

성공 지표

  • 80% 이상의 코드 커버리지 달성
  • 모든 테스트 통과 (그린)
  • 건너뛴 테스트나 비활성화된 테스트 없음
  • 빠른 테스트 실행 (단위 테스트 30초 미만)
  • E2E 테스트가 핵심 사용자 플로우를 커버
  • 테스트가 프로덕션 이전에 버그를 포착

기억하세요: 테스트는 선택 사항이 아닙니다. 테스트는 자신감 있는 리팩터링, 빠른 개발, 그리고 프로덕션 안정성을 가능하게 하는 안전망입니다.

© affaan-m, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in docs/ko-KR/skills/tdd-workflow of affaan-m/ECC.

Open the folder on GitHubat commit 4eb71d9

Used in 2 other repositories

We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 2 other GitHub owners. This page covers the copy in affaan-m/ECC, which our catalogue first saw on October 7, 2026.

Compare with similar skills

TDD Workflow next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

TDD Workflow compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
TDD Workflow this skillaffaan-m/ECC276k2 repos~2.1kAutomated safety check: PassMIT
TDD WorkflowhellangleZ/burn-in-cceverywhere-ralph11211 repos~2.4kAutomated safety check: PassNone
TDD Workflowxu-xiang/everything-claude-code-zh2k—~1.8kAutomated safety check: PassMIT
TDD Workflowxu-xiang/everything-claude-code-zh2k—~1.9kAutomated safety check: PassMIT
TDD Workflowxu-xiang/everything-claude-code-zh2k—~1.9kAutomated safety check: PassMIT
Odc TestingDouglasNeuroInformatics/OpenDataCapture119—~1.5kAutomated safety check: NotesApache-2.0

Similar skills

  • TDD Workflow

    hellangleZ/burn-in-cceverywhere-ralph

    A skill your agent uses when writing new features, fixing bugs, or refactoring code.

    112 GitHub starsUsed in 11 repos~2.4k tokens
    Testing & QAAuto-check passed
  • TDD Workflow

    xu-xiang/everything-claude-code-zh

    在编写新功能、修复 Bug 或重构代码时使用此技能。强制执行测试驱动开发(TDD),包括单元测试、集成测试和端到端(E2E)测试,覆盖率需达到 80% 以上。

    2k GitHub stars~1.8k tokensUpdated 7 mo ago
    Testing & QAAuto-check passed
  • TDD Workflow

    xu-xiang/everything-claude-code-zh

    在创建新功能、修复 Bug 或重构代码时使用此技能。强制执行测试驱动开发(TDD),要求包括单元测试、集成测试和 E2E 测试在内的测试覆盖率达到 80% 以上。

    2k GitHub stars~1.9k tokensUpdated 7 mo ago
    Testing & QAAuto-check passed
  • TDD Workflow

    xu-xiang/everything-claude-code-zh

    在编写新功能、修复 Bug 或重构代码时使用此技能。强制执行测试驱动开发(TDD),包括单元测试、集成测试和 E2E 测试,且覆盖率需达到 80% 以上。

    2k GitHub stars~1.9k tokensUpdated 7 mo ago
    Testing & QAAuto-check passed
  • Odc Testing

    DouglasNeuroInformatics/OpenDataCapture

    Test a change in Open Data Capture. An agent skill from DouglasNeuroInformatics/OpenDataCapture.

    119 GitHub stars~1.5k tokensUpdated 2 days ago
    Testing & QAAuto-check: notes
  • Testing

    NiceEval/NiceEval

    Inspect, select, author, modify, or review NiceEval E2E and Unit test owners.

    158 GitHub stars~2.1k tokensUpdated today
    Testing & QAAuto-check passed

More from affaan-m/ECC

All 683 skills in this repo
  • Skill Stocktake

    affaan-m/ECC

    Audits your installed Claude skills and commands for quality, with a quick mode for recently changed skills and a full mode that evaluates all of them through subagents.

    276k GitHub starsUsed in 5 repos~3.1k tokens
    Auto-check passed
  • Ingests, indexes, searches, edits and monitors video, audio and live streams through the VideoDB Python SDK, returning stream links, clips and timestamps.

    276k GitHub starsUsed in 3 repos~3.5k tokens
    Auto-check: notes
  • Docs Governance

    affaan-m/ECC

    Route broad documentation-governance requests to existing ECC skills and run an opt-in, read-only audit of mapped documentation roles, links, ADR indexes, and evidence references.

    276k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Rules Distillation

    affaan-m/ECC

    Scans installed skills for principles that recur across them and proposes rule-file changes: append, revise, add a section, create a file or leave as covered.

    276k GitHub starsUsed in 2 repos~2.3k tokens
    Auto-check passed
  • Builds DRAFT counterparty agreements from one markdown template and a small JSON spec per party, with clauses picked by the party's role.

    276k GitHub stars~2.9k tokensUpdated today
    Auto-check passed
  • Measures whether agents actually follow a skill, rule or agent definition by generating scenarios at three strictness levels and scoring tool-call traces.

    276k GitHub starsUsed in 1 repo~623 tokens
    Auto-check passed

Categories

Questions about TDD Workflow

What does TDD Workflow do?

새 기능 작성, 버그 수정 또는 코드 리팩터링 시 이 스킬을 사용하세요. An agent skill from affaan-m/ECC. TDD Workflow is an agent skill from affaan-m/ECC. 새 기능 작성, 버그 수정 또는 코드 리팩터링 시 이 스킬을 사용하세요.

When should I use TDD Workflow?

TDD Workflow fits situations like: tasks that involve Test-driven development; tasks that involve End-to-end testing; tasks that involve Unit testing.

How do I install TDD Workflow in Claude Code?

Run `npx skills add affaan-m/ECC --skill tdd-workflow -a claude-code`. Or copy the skill folder (docs/ko-KR/skills/tdd-workflow in affaan-m/ECC) into .claude/skills/tdd-workflow in your project. Claude Code loads it when a task matches its description.

How do I install TDD Workflow in Codex?

Run `npx skills add affaan-m/ECC --skill tdd-workflow -a codex`. Or copy the skill folder (docs/ko-KR/skills/tdd-workflow in affaan-m/ECC) into .agents/skills/tdd-workflow in your project. Codex loads it when a task matches its description.

Can I use TDD Workflow in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add affaan-m/ECC --skill tdd-workflow -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tdd-workflow, .gemini/skills/tdd-workflow, .github/skills/tdd-workflow and .opencode/skills/tdd-workflow in your project.

What does TDD Workflow need to run?

Going by SKILL.md and its folder, TDD Workflow needs the command-line tools its instructions call (npm).

Does TDD Workflow access the network?

SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is TDD Workflow safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does TDD Workflow use?

TDD Workflow is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does TDD Workflow use?

About 2.1k tokens (SKILL.md is roughly 8.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to TDD Workflow?

Skills that share tags, products or a category with TDD Workflow: TDD Workflow (hellangleZ/burn-in-cceverywhere-ralph, 112 stars), TDD Workflow (xu-xiang/everything-claude-code-zh, 2k stars), TDD Workflow (xu-xiang/everything-claude-code-zh, 2k stars) and TDD Workflow (xu-xiang/everything-claude-code-zh, 2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains TDD Workflow?

affaan-m (a GitHub user) maintains it in affaan-m/ECC, which has 276,111 GitHub stars. The repository holds 683 skills in this directory. The repository was last updated on October 10, 2026.

Source: affaan-m/ECC on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.