SuperAPI AI 工具集

test-shiny-app

测试与质量

查看项目

更新于 10-16 08:06

技能介绍

用途:为 Shiny 应用搭建完整测试体系,包括用 shinytest2 做端到端浏览器测试、用 testServer() 做模块服务端逻辑单元测试。适用于给现有 Shiny 应用补测试、为新项目制定测试策略、重构前写回归测试、把应用测试接入 CI/CD。

主要能力:testServer() 无需浏览器即可测试模块服务端逻辑,通过 args 传响应式参数,用 session$setInputs() 模拟交互、按名称读取返回值,并覆盖空数据、NULL 输入、非法值等边界;shinytest2 通过 AppDriver$new() 在无头 Chrome 中启动应用,用 app$set_inputs() 操作、app$wait_for_idle() 等响应式更新完成、app$expect_values() 生成或比对快照,快照默认存于 tests/testthat/_snaps/。可用 record_test() 交互式录制并自动生成测试代码。

使用方式:先安装依赖,install.packages("shinytest2");golem 应用可用 usethis::use_package("shinytest2", type = "Suggests");testthat 基础设施缺失时用 usethis::use_testthat(edition = 3)。用 devtools::test() 运行测试,用 testthat::snapshot_review() 查看快照差异、snapshot_accept() 接受变更。CI 中需安装 Chromium/Chrome,并设置 CHROMOTE_CHROME,再执行 Rscript -e 'devtools::test()'。

限制与注意:shinytest2 依赖 chromote 与无头 Chrome,缺失时需安装,WSL 可 sudo apt install -y chromium-browser,并以 chromote::find_chrome() 验证;模块输入 ID 在端到端测试中用 "moduleId-inputId" 连字符格式;set_inputs() 后应调用 wait_for_idle(),否则断言可能早于响应式更新完成;截图类快照跨平台易碎,数据断言优先用 expect_values();快照应在同一平台(通常为 CI)生成后再提交。自检要求:devtools::test() 无错误、模块逻辑与关键流程均有覆盖、快照纳入版本控制、CI 通过、边界情况已测。资料未提供具体价格与平台支持范围。