R-Blogger블로그·해설한국어2025-08-23
R Shiny 앱용 견고한 shinytest2 테스트 작성법
R Shiny 테스트 강화 가이드 안녕하세요, R 사용자 여러분! 이 글은 안정적인 셀렉터와 재사용 가능한 액션을 활용해 R Shiny 어플리케이션 테스트를 한층 더 강화하는 단계별 가이드를 제공합니다. 테스트 자동화를 통해 버그를 조기에 발견하고, 배포 주기를 단축시키세요. 전제 조건 아래 패키지들이 설치되어 있어야 합니다. install.packages(c("shiny", "testthat", "shinytest", "tidyverse")) 안정적 셀렉터 설계 테스트가 실패하기 쉬운 DOM 구조 대신, data-testid 속성을 활용해 예측 가능한 셀렉터를 지정합니다. ui <- fluidPage( actionButton("go", "시작", `data-testid` = "start-btn"), textInput("name", "이름", value = "", `data-testid` = "name-input") ) 테스트 스크립트 작성 ```{r} test_that("사용자 입력을 확인합니다", { testApp <- ShinyApp$new() testApp$setInputs(name = "홍길동") testApp$click("go") expect_equal(testApp$getValue("name"), "홍길동") }) ``` 재사용 가능한 액션 정의 공통 동작은 별도 함수를 만들어 테스트와 애플리케이션 코드 양쪽에서 호출하도록 합니다. # utils.R click_button <- function(app, btn_id) { app$click(btn_id) } CI 파이프라인에 통합 GitHub Actions를 이용해 PR마다 자동 테스트를 실행합니다. name: R Shiny Test on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install R uses: r-lib/actions/setup-r@v1 - name: Install dependencies run: R -e "install.packages(c('shiny', 'testthat', 'shinytest'))" - name: Run tests run: Rscript -e "testthat::test_dir('tests')" 문제 해결 팁 동적 UI가 있는 경우 session$sendCustomMessage를 활용해 테스트를 동기화하세요. 오류 메시지에 tidyverse 스타일 로깅을 추가해 디버깅을 용이하게 하세요. 마무리 이제 안정적인 셀렉터와 재사용 가능한 액션이 결합된 테스트 스위트가 완성되었습니다. 프로젝트에 바로 적용해 보시고, 더 나은 코드 품질을 경험해 보세요. 추가 자료가 필요하면 Shiny 공식 튜토리얼이나 testthat 문서를 참고하시기 바랍니다.
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
- 작성자
- R-Blogger
- 출처
- R-Blogger
- 플랫폼
- R-Blogger
- 분류
- 블로그·해설
- 언어
- 한국어
- 발행일
- 2025-08-23