피드로 돌아가기
Dev.toBackend
원문 읽기
Browser-less Integration Test로 Turbo Frame 검증 속도 및 안정성 극대화
Testing Turbo Frames in Rails Without a Browser
AI 요약
Context
Turbo Frame 상호작용 검증을 위해 Capybara 기반의 System Test를 사용할 경우, 브라우저 구동으로 인한 테스트 실행 시간 증가와 플래키(Flaky)한 테스트 결과라는 한계점 존재.
Technical Solution
- HTTP Header 제어를 통한 Turbo Frame 요청 시뮬레이션:
Turbo-Frame헤더를 명시적으로 추가하여 서버가 Partial Layout을 렌더링하도록 유도하는 설계 turbo-rails전용 Assertion 도입:assert_turbo_frame을 통해 DOM ID, src, target, loading 속성을 정밀하게 검증하는 구조- 블록 기반 계층적 검증: 중첩된 Turbo Frame 내의 특정 HTML 요소와 텍스트를 검증하는 Recursive Assertion 로직 적용
- 테스트 범위의 전략적 분리: 서버 사이드 렌더링 로직은 Integration Test로 처리하고, 브라우저의 DOM Swap 및 Focus 관리 등 Client-side 동작만 System Test로 제한하는 이원화 전략
실천 포인트
- Turbo Frame 전용 엔드포인트 테스트 시 `headers: { "Turbo-Frame" => "frame_id" }` 포함 여부 확인 - Lazy-loaded 프레임의 경우 초기 페이지의 `src` 및 `loading: "lazy"` 속성 정의를 우선 검증 - DOM Swap, Scroll Position 등 브라우저 런타임 동작이 핵심인 경우에만 Capybara System Test 도입 고려