Skip to content

[bug] admin StudentFormDialog 테스트가 CI에서 간헐적으로 시간 초과(20초)로 실패한다 #284

Closed

Description

@s2yeons

문제 요약

CI의 Test 단계가 코드와 관계없이 간헐적으로 admin의 StudentFormDialog 테스트 시간 초과로 실패합니다.

FAIL src/widgets/students/ui/StudentFormDialog/index.test.tsx > StudentFormDialog 추가 > 입력한 학생을 등록하고 창을 닫는다
Error: Test timed out in 20000ms.
  • 로컬에서 단독으로 돌리면 0.6초 걸리는 테스트가 CI에서는 20초를 넘깁니다. 같은 파일의 등록에 실패하면 안내하고 창을 그대로 둔다도 CI에서 통과는 했지만 14.6초(로컬 0.48초)가 걸렸습니다. 어딘가에서 멈춘 것이 아니라 전체가 약 30배 느려진 것입니다.
  • 시간 대부분은 Radix Select 선택에서 나옵니다. 성공 케이스는 selectOption을 13번 호출하는데, 로컬 계측 기준으로 글자 입력은 한 글자에 23ms인 반면 Select 선택은 한 번에 6085ms가 걸립니다.
  • @repo/test-utils의 selectOption이 screen.findByRole('option')으로 문서 전체에서 항목을 찾기 때문에, 폼이 클수록 접근성 계산 비용이 커집니다.
  • CI 러너는 4 vCPU인데 turbo run test가 6개 패키지의 vitest를 동시에 띄우고 각 vitest가 다시 워커를 여러 개 띄워, jsdom 워커가 CPU를 나눠 쓰면서 로컬보다 훨씬 느려집니다.
  • 지금까지는 제한 시간을 올리는 방식으로 대응해 왔습니다(기본 5초 → @repo/vitest-config 전역 15초 → 이 테스트만 20초). 느린 원인이 남아 있어 같은 문제가 반복됩니다.

재현 방법

  • 절차:
    1. PR을 올리거나 CI를 재실행한다
    2. Lint and Build의 Test 단계에서 pnpm test(turbo run test)가 실행된다
  • 기대 결과: 코드가 같으면 테스트 결과도 같음
  • 실제 결과: 같은 커밋이 실행에 따라 StudentFormDialog 테스트 시간 초과로 실패하거나 통과함

예) #283(v20261102.0 릴리스 PR)에서 admin 테스트 212개 중 이 1개만 시간 초과로 실패하였습니다.

재현 빈도

가끔 발생

실행 환경 및 참고 자료 (선택)

  • 실패 로그: https://github.com/themoment-team/datagsm-client/actions/runs/41401581593
  • 영향받는 지점: packages/test-utils/src/select.ts(selectOption), apps/admin/src/widgets/students/ui/StudentFormDialog/index.test.tsx
  • 관련 이슈: [bug] next/font/google이 Google Fonts의 확장자 없는 URL을 처리하지 못해 CI 빌드가 간헐적으로 실패 #277 (같은 기간 StudentsPage 테스트도 CI에서 시간 초과로 실패한 기록이 있음)
  • 제안하는 수정 방향:
    • selectOption이 열린 listbox 안에서만 option을 찾도록 범위를 좁힌다. 로컬 계측에서 Select 1회가 58ms에서 28ms로 줄었고, 전체 패키지 테스트 778개가 그대로 통과하는 것을 확인했다.
    • hidden: true로 접근성 검사를 건너뛰는 방법은 Radix가 함께 렌더링하는 숨은 native <option>까지 잡혀 쓸 수 없다.
    • 위 수정만으로는 절반 정도만 줄어들므로, CI에서 turbo run test --concurrency=<n>처럼 패키지 테스트 동시 실행 수를 제한해 CPU 경합을 줄이는 방안도 함께 검토한다(CI 전체 소요 시간 변화 확인 필요).

Activity

  1. self-assigned this
    on Nov 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions