← ClaudeAtlas

tddlisted

This skill should be used when the user wants to implement features or fix bugs using Test-Driven Development. Trigger on "tdd", "TDD", "테스트 주도", "테스트 먼저", "test first", "test-driven", "RED GREEN REFACTOR", "레드 그린", "실패하는 테스트부터", "테스트부터 짜자". RED-GREEN-REFACTOR 사이클을 강제하며, 실패하는 테스트 없이 프로덕션 코드 작성을 금지한다.
kingkingburger/plugin-mh · ★ 1 · Testing & QA · score 65
Install: claude install-skill kingkingburger/plugin-mh
# TDD: Test-Driven Development 테스트를 먼저 쓴다. 실패를 확인한다. 최소한의 코드로 통과시킨다. > **핵심 원칙**: 테스트가 실패하는 걸 보지 않았다면, 그 테스트가 올바른 것을 검증하는지 알 수 없다. --- ## 절대 법칙 ``` 실패하는 테스트 없이 프로덕션 코드를 작성하지 않는다. ``` 테스트 전에 코드를 썼다면? **삭제하고 다시 시작한다.** - "참고용"으로 남기지 않는다 - "적응"시키면서 테스트를 쓰지 않는다 - 보지도 않는다 - 삭제는 삭제다 ## 적��� 대상 **항상 적용:** - 새 기능 구현 - 버그 수정 - 리팩토링 - 동작 변경 **예외 (사용자 확인 필요):** - 일회용 프로토타입 - 생성된 코드 (codegen) - 설정 파일 ## RED → GREEN → REFACTOR ### RED: 실패하는 테스트 작성 하나의 동작을 검증하는 최소한의 테스트를 작성한다. **좋은 테스트:** - 이름이 동작을 설명한다 - 하나의 것만 테스트한다 - 실제 코드를 사용한다 (mock은 불가피할 때만) **나쁜 테스트:** - `test('works')` — 이름이 모호 - 이름에 "and"가 있다 → 분리해야 한다 - mock을 테스트하지 실제 코드를 테스트하지 않는다 ### RED 검증: 실패를 확인한다 **필수. 절대 건너뛰지 않는다.** ```bash # 테스트 실행 npm test path/to/test.test.ts # 또는 프로젝트의 테스트 명령 ``` 확인 사항: - 테스트가 실패한다 (에러가 아니라 실패) - 실패 메시지가 예상한 것과 같다 - 기능이 없어서 실패한다 (오타가 아니라) **테스트가 통과한다면?** 이미 존재하는 동작을 테스트하고 있다. 테스트를 수정해라. ### GREEN: 최소한의 코드 테스트를 통과시키는 **가장 단순한** 코드를 작성한다. - 기능을 추가하지 않는다 - 다른 코드를 리팩토링하지 않는다 - 테스트 범위를 넘어서 "개선"하지 않는다 ### GREEN 검증: 통과를 확인한다 **필수.** ```bash npm test path/to/test.test.ts ``` 확인 사항: - 테스트가 통과한다 - 다른 테스트도 여전히 통과한다 - 경고나 에러 없이 깨끗하다 **테스트 실패?** 코드를 수정한다, 테스트를 수정하지 않는다. **다른 테스트 실패?** 지금 바로 수정한다. ### REFACTOR: 정리 GREEN 이후에만: - 중복 제거 - 이름 개선 - 헬퍼 추출 테스트를 GREEN으로 유지한다. 동작을 추가하지 않는다. ### 반복 다음 기능을 위한 다음 실패하는 테스트로. ## 버그 수정 예시 **버그:** 빈 이메일이 허용됨 **RED** ```typescript test('빈 이메일을 거부한다', async () => { const result = await submitForm({ email: '' }); expect(result.error).toBe('이메일은