LogoSkills

/cc-e2e:kick-off — 테스트 한 번에 깔아주는 도우미

기능 구현 시점에 unit(UseCase/BLoC) + BDD(Patrol E2E 전용) + E2E 3계층 테스트 스캐폴드를 생성합니다. BDD(Gherkin) 시나리오는 위젯 테스트를 생성하지 않습니다. .feature가 없으면 초안을 작성합니다.

/cc-e2e:kick-off — 테스트 한 번에 깔아주는 도우미#

항목내용
실행 명령/cc-e2e:kick-off
분류E2E 작성
난이도●●● 높음
MCP 서버flutter-skill, patrol

한마디로#

새 기능을 다 만들고 나면, 그 기능을 검증할 테스트 3종 세트를 한 방에 깔아주는 명령입니다. 이사 들어온 새 집에 화재경보기, 가스경보기, 도난경보기를 한 번에 설치해 주는 것과 비슷해요.

누가·언제 쓰나요#

  • 새 기능 구현을 막 끝낸 개발자가, 그 기능의 테스트를 한꺼번에 준비하고 싶을 때
  • PR(코드 제출)을 올리기 전에 "테스트 3종이 모두 걸려 있는지" 확인하고 싶을 때
  • cc-bricksfeature:* 명령으로 기능 뼈대를 만든 직후, 테스트 세팅을 자동으로 끝내고 싶을 때

무엇을 해주나요#

기능 이름 하나만 주면, 검증용 테스트 파일들을 자동으로 만들어 줍니다.

  • Unit 테스트 — 작은 부품 하나하나가 제대로 동작하는지 확인하는 파일 (UseCase / BLoC / Repository)
  • BDD 테스트 — 사람이 읽을 수 있는 시나리오(.feature)와, 실제 기기(Patrol) 검증 파일 틀을 app/{app}/integration_test/에 마련합니다. ⛔ 코드 생성기를 쓰지 않고, 화면 단위(위젯) 검증 파일도 만들지 않습니다 — BDD 시나리오는 손으로 쓰는 Patrol E2E로만 실행됩니다.
  • 위젯 테스트 (필요시, BDD 와 무관) — feature 패키지 안에 통상적인 손으로 쓰는 위젯 테스트를 별도로 둘 수 있습니다. .feature 에서 파생되지 않습니다.
  • 마지막에 요약 리포트 — 만들어진 파일 개수, 아직 채워야 할 작업(TODO) 목록, 검증 통과 여부, 다음에 할 일 안내

.feature 시나리오가 아직 없으면, 앱을 직접 둘러보며 시나리오 초안까지 대신 만들어 줄 수도 있습니다.

어떻게 쓰나요#

# 기본 — 기능 폴더에서 알아서 감지
/cc-e2e:kick-off sign_in

# 시나리오(.feature)가 없을 때 만드는 방식 지정
/cc-e2e:kick-off sign_in --with-exploration   # 앱을 둘러보며 시나리오 초안부터 만들기
/cc-e2e:kick-off sign_in --skeleton-only       # 최소 뼈대 시나리오만 만들기

# 원하는 테스트 종류만 선택
/cc-e2e:kick-off sign_in --layers=unit,bdd     # Unit + BDD/cc-e2e:kick-off sign_in --layers=bdd          # BDD 만

# 실제로 만들지 않고 계획만 미리보기
/cc-e2e:kick-off sign_in --dry-run
  • sign_in 자리에는 테스트를 깔 기능 이름을 적습니다 (소문자_언더바 형식).
  • 옵션을 안 붙이면 기본으로 Unit + BDD 테스트를 만듭니다.
  • 무엇이 만들어질지 먼저 확인하고 싶으면 --dry-run 으로 계획만 볼 수 있어요.

안에서 무슨 일이 벌어지나요#

대략 다음 순서로 진행됩니다.

  1. 사전 조사 — 기능이 실제로 있는지, 이미 만들어진 테스트는 있는지, 손대면 안 되는(lock) 시나리오는 없는지 확인합니다.
  2. Unit 테스트 깔기 — 작은 부품별 테스트 파일(UseCase / BLoC / Repository)을 한꺼번에 만듭니다.
  3. 시나리오(.feature) 확보app/{app}/integration_test/features/에 이미 있으면 그대로 쓰고, 없으면 옵션에 따라 앱을 둘러보며 만들거나 최소 뼈대만 만듭니다.
  4. BDD 테스트 깔기app/{app}/integration_test/에 시나리오에 맞는 단계별 템플릿과, 손으로 채워 넣을 Patrol 테스트 틀을 마련합니다. 코드 생성기를 쓰지 않고, 화면 단위(위젯) 검증 파일도 만들지 않습니다.
  5. 검증/cc-dev:pr:preflight 를 자동으로 돌려 방금 만든 테스트가 실제로 통과하는지 확인하고, 실패하면 원인을 정리해 PR 생성을 막아 줍니다.
  6. 리포트 — 만든 파일 수, 남은 작업, 검증 결과, 다음 단계를 한눈에 정리해 보여줍니다.

⚙️ 상세 옵션·실행 명세 (개발자 / AI 에이전트용)

Triggers#

  • 새 feature 구현 직후 테스트 번들을 준비할 때
  • PR 올리기 전에 "테스트 3 레이어가 모두 걸려 있는지" 검증할 때
  • cc-bricks / cc-flutter:feature:* 로 feature 만든 뒤 테스트 자동 세팅

사용법#

# 기본 — feature 디렉토리에서 자동 감지
/cc-e2e:kick-off sign_in

# .feature 생성 방법 명시
/cc-e2e:kick-off sign_in --with-exploration      # flutter-skill 탐색부터
/cc-e2e:kick-off sign_in --skeleton-only          # skeleton .feature 만 생성

# 특정 레이어만
/cc-e2e:kick-off sign_in --layers=unit,bdd        # unit + BDD/cc-e2e:kick-off sign_in --layers=bdd             # BDD 만

# Dry run
/cc-e2e:kick-off sign_in --dry-run                # 생성 계획만 출력

파라미터#

파라미터필수설명기본
featurefeature 모듈 이름 (snake_case)
--with-exploration.feature 없으면 /cc-e2e:explore 먼저 호출false
--skeleton-only.feature 없으면 최소 skeleton 생성 (탐색 생략)false
--layers생성 레이어 선택 (unit,bdd,e2e)unit,bdd
--dry-run생성 계획만 출력false
--devicePatrol 검증용 디바이스자동 감지

실행 단계#

  1. 사전 조사 — feature 모듈 존재 확인, 기존 테스트 파일 파악, lock 레코드 확인
  2. Unit 레이어 스캐폴드 (위임: cc-flutter:unit-testing)
    • UseCase 테스트 파일 일괄 생성
    • BLoC 테스트 파일 생성 (blocTest)
    • Repository 테스트 파일 생성
  3. .feature 확보 (⛔ 항상 app/{app}/integration_test/features/ — feature 패키지 경유 없음)
    • 존재 → 그대로 사용
    • 없고 --with-exploration/cc-e2e:explore + /cc-e2e:draft
    • 없고 --skeleton-only → 최소 skeleton 작성
  4. BDD 레이어 스캐폴드 (app/{app}/integration_test/ 하나에만, 코드 생성기 없음)
    • step/ 에 TestDriver step 파일 템플릿 (TODO 주석)
    • .feature 의 Scenario 를 Background 기준으로 묶어 Patrol 테스트 틀 생성 (patrolTest + TODO — 사람이 step 호출을 채움)
      • 같은 Background 3건 이상 → scenarios/{name}_{screen}_batch_test.dart (배치, 기본)
        • step/the_{screen}_screen_is_reset.dart 리셋 스텁 + helpers/screen_batch.dart 러너
      • @isolated 이거나 2건 이하 → scenarios/{name}_{scenario}_test.dart
    • test_bundle.dart + run_all_scenarios.sh 갱신 (배치는 파일 1개 = 항목 1개)
  5. 검증/cc-dev:pr:preflight --scope={feature-packages} 자동 호출
    • Unit + Widget(BDD 와 무관한 일반 위젯 테스트만, 변경된 feature 패키지 범위)
    • Integration @smoke (조건부, BDD 시나리오 포함)
    • 실패 시 원인 그룹화 + PR 생성 차단
  6. 리포트 — 생성 파일 수, TODO 남은 step, preflight 결과, 다음 단계 제안

실행 흐름 다이어그램#

   /cc-e2e:kick-off sign_in
        ↓
  [사전 조사]
   ├─ feature/common/auth/ 존재? ✅
   ├─ 기존 테스트? 일부 있음
   └─ lock 레코드? 없음
        ↓
  [Unit 레이어]
   ├─ UseCase: SignInUseCase → test/src/domain/usecase/sign_in_usecase_test.dart
   ├─ BLoC: SignInBloc → test/src/presentation/bloc/sign_in_bloc_test.dart
   └─ Repository: AuthRepository → test/src/data/repository/auth_repository_test.dart
        ↓
  [.feature 확보]
   └─ 없음 + --with-exploration
       → /cc-e2e:explore sign_in → /cc-e2e:draft sign_in
        ↓
  [BDD 레이어] (app/kobic/integration_test/ 하나에만, 코드 생성기 없음)
   ├─ features/sign_in.feature 확보 (Scenario 4건 — 같은 Background 3+ @isolated 1)
   ├─ step/ 템플릿 생성 (i_tap_the_sign_in_button.dart 등)
   ├─ step/the_sign_in_screen_is_reset.dart 리셋 스텁 (3항 의무 TODO)
   ├─ scenarios/sign_in_sign_in_form_batch_test.dart 틀 (배치 3건 — 도달 1)
   └─ scenarios/sign_in_successful_login_test.dart 틀 (@isolated — 인증 상태 변경)[검증] /cc-dev:pr:preflight --scope=feature_common_auth
   ├─ UnitPASS (42/0)
   ├─ WidgetPASS (12/0, 일반 위젯 테스트만 — BDD 무관)
   └─ Integration @smokeSKIP (디바이스 없음 or 시나리오 미존재)[리포트]
   ├─ 생성 파일 9개
   ├─ TODO step 3(목록)
   ├─ Preflight: PASS (Unit+Widget)
   └─ 다음 단계: step-implement 로 TODO 채우기 → /cc-e2e:lock → /cc-dev:pr:preflight --with-integration

출력#

  • Unit 테스트 파일들
  • app/{app}/integration_test/ 하나에 모인 BDD .feature + step/ 템플릿(리셋 step 포함) + Patrol 배치·단독 테스트 틀 (⛔ widget 테스트 없음, 코드 생성기 없음)
  • test_bundle.dart 업데이트
  • 생성 요약 리포트 + TODO 목록

실패 케이스#

원인대응
feature 모듈 없음cc-bricks 또는 cc-flutter:feature:* 안내
feature 패키지 안에 레거시 test/src/bdd/ 발견rules/bdd-test-patterns.md 마이그레이션 절차 안내 — 제거 후 Patrol scenarios/ 로 이관
--with-exploration 요청인데 앱 미기동flutter run --dart-define=ENABLE_FLUTTER_SKILL=true 명령 안내
lock 된 시나리오 덮어쓰기 시도/e2e:unlock 필요 안내
Patrol 검증 실패step-implement 로 TODO 채우기 권유

관련#

  • skills/feature-test-bundle/SKILL.md — 실제 오케스트레이션 본체
  • commands/explore.md — .feature 가 없을 때 ① EXPLORE 진입
  • commands/draft.md — 저널 → .feature 초안
  • commands/lock.md — 번들 완성 후 박제
  • cc-dev:pr:preflight — PR 올리기 전 자동 게이트 (본 커맨드가 마지막 단계로 호출)
  • 위임: cc-flutter:unit-testing, cc-flutter:bdd-testing, cc-flutter:integration-testing
  • 조직 표준: cc-flutter/rules/bdd-test-patterns.md
  • PR 정책: cc-dev/rules/pr-preflight-policy.md