| name | e2e-until-green |
| description | E2E(엔드투엔드) 테스트 스위트를 실행해 UI·통합 단계 실패를 고치고, 모든 spec이 통과(종료 코드 0)할 때까지 자동으로 반복하는 닫힌 루프입니다. 사용자가 "E2E 통과할 때까지 돌려줘", "엔드투엔드 테스트 green 만들어줘", "E2E 깨진 거 다 고쳐줘", "Playwright/Cypress E2E 통과시켜줘", "UI랑 통합 테스트 실패 고쳐줘", "e2e until green", "run end-to-end tests until they pass", "fix e2e failures and loop until the suite passes"처럼 요청하거나, 깨진 E2E 시나리오를 반복적으로 고쳐 전부 통과시키고 싶을 때 사용하세요. (구분: 유닛·전체 테스트 스위트는 looping:test-until-green, Playwright/Percy 스크린샷 픽셀 비교는 looping:visual-regression-until-match, 프로덕션 빌드 컴파일 에러는 looping:build-until-green, 배포 후 스테이징 스모크 점검은 looping:staging-smoke-test) |
E2E 통과까지 (E2E Until Green)
엔드투엔드 테스트를 돌리고, UI·통합 실패를 고치고, E2E 스위트가 전부 통과할 때까지 반복합니다.
| 항목 | 값 |
|---|
| 카테고리 | 테스트(Testing) |
| 트리거 | 수동(manual) — 사람이 직접 시작 |
| 종료 조건(Exit) | E2E 명령이 종료 코드 0으로 끝날 때 |
| 반복 한도(Max iterations) | 10 |
| 매 반복 체크 명령 | npm run test:e2e |
| 가드레일 | 강화됨(Hardened) |
| 지원 에이전트 | Claude Code · Cursor |
이 루프는 언제 쓰나
E2E 스위트가 여러 개 빨갛게 떠 있는데, 실패 원인이 코드 한 줄이 아니라 화면 흐름·셀렉터·비동기 타이밍·통합 단계에 흩어져 있어 "하나씩 보면서 고쳐달라"고 일일이 지시하기 번거로울 때 씁니다. 한 번 시작하면 에이전트가 실행 → 실패 분석 → 최소 수정 → 재실행을 스스로 반복하며 전부 통과(green)에 수렴시킵니다. E2E에서 특히 중요한 건 깨지기 쉬운 셀렉터 대신 안정적인 셀렉터를 쓰고, *임의의 sleep 대신 현실적인 대기(wait)*를 거는 것 — 그래야 다음 회차에 같은 실패가 되살아나지 않습니다.
루프 흐름
수동 시작 → E2E 실행 → 실패 수정 → 재실행 →〔피드백 게이트〕전부 통과?
↑ │ 아니오
└───────────────────────────────────────┘
│ 예
종료
매 반복(pass)마다 하는 일
- E2E 실행 — 프로젝트의 E2E 테스트 명령을 돌려 실패를 수집합니다. →
npm run test:e2e
npm run test:e2e
- 실패 수정 — 실패한 E2E spec의 가장 작은 근본 원인을 고칩니다. 안정적인 셀렉터와 현실적인 대기(wait)를 선호하세요.
- 재실행 — 모든 spec이 통과할 때까지 E2E를 다시 돌립니다. →
npm run test:e2e
npm run test:e2e
가드레일 (점수 조작 방지 규칙)
종료 조건을 "가짜로" 통과시키지 못하게 막는 규칙입니다. 반드시 지키세요.
- 체크 명령이나 종료 기준을 고쳐서 억지로 성공시키지 않는다.
- 체크를 건너뛰거나 비활성화·우회해서 종료 조건을 통과시키지 않는다.
- 여러 번 반복해도 막히면, 지표를 조작하지 말고 멈추고 블로커를 보고한다.
- 스위트를 통과시키려고 테스트를 약화·삭제·skip 하지 않는다.
- 진짜 단언(assertion)을 항상 통과하는 껍데기 테스트로 바꾸지 않는다.
- green으로 만들려고 테스트를 땜질하기보다 프로덕션 코드를 고치는 쪽을 택한다.
Claude Code에서 실행하기
가장 간단합니다. 아래 kickoff 프롬프트를 그대로 붙여넣으면 에이전트가 스스로 반복합니다.
"E2E 통과까지(E2E Until Green)" 루프를 시작합니다.
목표: E2E 스위트 통과
최대 반복: 10
매 반복 사이 실행: npm run test:e2e
종료 조건: E2E 명령이 종료 코드 0으로 끝날 때
1단계: E2E 테스트를 실행한다. 첫 번째 실패 spec을 고치고 반복한다.
이 루프를 스스로 페이싱(self-pace)하라. 매 반복 후 체크 명령을 실행하고 출력을 읽어, 종료
조건이 충족되지 않았을 때만 계속한다. 종료 조건이 통과하거나 최대 반복에 도달하면 멈춘다.
매 회차마다 한 줄 상태 업데이트를 남긴다.
팁: npm run test:e2e는 예시입니다. 프로젝트에 맞게 npx playwright test, npx cypress run, pnpm test:e2e, npm run e2e 등으로 바꾸세요.
팁 / 변형
- 러너 교체: Playwright는
npx playwright test, Cypress는 npx cypress run, WebdriverIO는 npx wdio run 등 프로젝트 E2E 러너에 맞게 체크 명령을 바꾸세요.
- 수렴이 멈추면: 같은 spec이 2회 연속 실패하면 가드레일대로 멈추고, 원인 가설(셀렉터 변경, 비동기 타이밍, 시드 데이터 등)과 함께 사람에게 보고하게 하세요.
- 범위 좁히기: 특정 시나리오만 고치려면
npx playwright test <파일>이나 npx cypress run --spec <패턴>으로 좁히면 반복이 더 빠릅니다.
- 연관 루프: 유닛·전체 스위트는
looping:test-until-green, 픽셀 단위 시각 회귀는 looping:visual-regression-until-match, 배포 후 스테이징 점검은 looping:staging-smoke-test.
원본 영어 kickoff (loops.elorm.xyz 원문)
Start the "E2E Until Green" loop.
Goal: E2E suite passes
Max iterations: 10
Between iterations run: npm run test:e2e
Exit when: E2E command exits 0
Step 1: Run E2E tests. Fix the first failing spec, then repeat.
Self-pace this loop. After each iteration, run the check command, read the output, and only continue if the exit condition is not met. Stop when the exit condition passes or max iterations is reached. Give a short status update each pass.
출처: https://loops.elorm.xyz/loops/e2e-until-green