Capybara와 Cuprite를 사용하여 Rails 시스템 테스트에서 브라우저 콘솔 로그 캡처하기

Capture Browser Console Logs in Rails System Tests with Capybara and Cuprite · Daniela Baron

작성자
발행일
2025년 07월 24일

핵심 요약

  • 1 Rails 시스템 테스트 시 Capybara와 Cuprite를 활용하여 브라우저 콘솔 로그를 캡처하는 방법을 설명합니다.
  • 2 StringIO 로거를 Cuprite 드라이버에 구성함으로써 JavaScript 디버깅 시 발생하는 타이밍 문제를 효과적으로 해결할 수 있습니다.
  • 3 이 방법은 테스트 속도를 저하시키지 않고 실제 환경에서 프론트엔드 코드의 동작을 정확하게 파악할 수 있도록 돕습니다.

도입

Rails 시스템 테스트를 작성할 때, Capybara는 사용자 상호작용을 시뮬레이션하는 데 널리 사용됩니다. 특히 JavaScript 기반의 싱글 페이지 애플리케이션(SPA)의 경우, 브라우저 내 JavaScript 실행을 테스트하기 위해 Cuprite와 같은 JavaScript 드라이버의 설치 및 구성이 필수적입니다. 테스트 실행 중 이벤트 처리나 타이밍 문제와 같은 예기치 않은 동작이 발생할 때, 프론트엔드 코드에 `console.log` 문을 추가하는 것이 문제 해결에 도움이 될 수 있습니다. 하지만 헤드리스 모드에서 실행되는 Rails 시스템 테스트 중에 이러한 로그를 어떻게 캡처하고 확인할 수 있는지는 명확하지 않습니다. 디버깅을 위해 비-헤드리스 브라우저(예: Chrome)로 테스트를 실행하거나 `binding.pry`와 같은 도구를 사용하는 방법도 있지만, 이는 브라우저 속도를 저하시켜 타이밍 관련 문제가 발생하지 않게 만들 수 있으며, 결과적으로 실제 문제의 원인을 가릴 수 있습니다. 이 글은 테스트 속도 저하 없이 브라우저 콘솔 로그를 효율적으로 캡처하는 유용한 방법을 제시합니다.

브라우저 콘솔 로그를 캡처하는 핵심적인 해결책은 Capybara 드라이버 구성을 수정하는 것입니다. spec/support/capybara.rb 파일에서 Cuprite 드라이버를 등록할 때 StringIO 로거를 정의하여 모든 브라우저 콘솔 출력을 캡처하도록 설정합니다. 이 로거는 테스트 실행 중 브라우저에서 발생하는 모든 console.log 메시지를 포함한 출력을 기록합니다. 이렇게 구성된 로거는 테스트 코드 내에서 page.driver.browser.options.logger.string을 통해 접근할 수 있으며, 캡처된 로그는 Runtime.consoleAPICalled 형식의 JSON으로 출력됩니다. 이를 통해 개발자는 자신이 추가한 console.log 메시지를 포함하여 브라우저의 내부 출력을 확인할 수 있습니다. 캡처된 로그의 양이 방대할 수 있으므로, 효율적인 관리를 위해 출력을 클립보드로 복사하거나 텍스트 파일로 리디렉션하는 것이 좋습니다. 또한, 테스트 코드 내에서 logs.lines.select { |line| line.include?("YOUR_KEYWORD") }와 같이 특정 키워드로 로그를 필터링하여 필요한 정보만 추출할 수도 있습니다. 중요한 점은 JavaScript 파일(또는 기타 프론트엔드 자산)을 변경한 경우, 시스템 테스트를 실행하기 전에 bin/rails assets:precompile 명령어를 실행하여 자산 번들을 다시 컴파일해야 한다는 것입니다. 이를 잊으면 변경 사항이 테스트에 반영되지 않고 오래된 JavaScript가 사용될 수 있습니다. 마지막으로, Cuprite 프로젝트의 오픈 소스 특성을 활용하여 소스 코드와 테스트 스위트를 탐색하는 것이 문제 해결에 큰 도움이 될 수 있음을 강조하며, StringIO 로거를 사용한 콘솔 로그 캡처 예제를 소스 코드에서 발견한 경험을 공유합니다.

결론

Capybara와 Cuprite를 사용하는 Rails 시스템 테스트에서 브라우저 콘솔 로그를 캡처하는 것은 JavaScript 타이밍 문제를 디버깅하기 위한 매우 효과적인 방법입니다. `StringIO` 로거를 드라이버 구성에 포함함으로써, 테스트의 실행 속도를 저하시키지 않으면서도 모든 `console.log` 출력을 손쉽게 얻을 수 있습니다. 캡처된 로그의 양이 상당할 수 있으므로, 이를 파일로 리디렉션하거나 테스트 코드 내에서 필요한 부분을 필터링하는 등의 적절한 관리 전략을 적용하는 것이 권장됩니다. 이 접근 방식은 개발자가 실제 운영 환경과 유사한 조건에서 애플리케이션의 JavaScript가 예상대로 작동하는지 확인할 수 있도록 지원하며, 더욱 견고하고 신뢰할 수 있는 테스트 환경을 구축하는 데 기여합니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!