You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在golem应用中正确使用shinytest2进行测试?

在Golem应用中正确使用shinytest2的解决方案

一、解决原始目录结构与函数找不到的问题

不要在项目根目录创建app.R——这会让shinytest2将项目识别为普通Shiny应用而非R包,进而引发加载冲突。正确操作步骤:

  1. 将shinytest2添加到DESCRIPTION的Suggests字段:
    usethis::use_package("shinytest2", type = "Suggests")
    
  2. 初始化shinytest2测试结构:
    shinytest2::use_shinytest2()
    
    该命令会自动创建tests/testthat/shinytest2目录及必要配置文件。
  3. 始终在包加载状态下操作:
    执行devtools::load_all()加载Golem包完整命名空间,确保with_golem_options等核心函数可被正常调用。

二、解决录制测试时Golem配置参数未传递的问题

出现的数据库连接失败,根源是录制测试时golem::get_golem_options()无法获取传入的配置值,可通过以下两种方式解决:

方式1:录制时显式传递参数给run_app

调用record_test前,直接将所需参数传入run_app,确保Golem选项被正确初始化:

# 先加载Golem包
devtools::load_all()

# 显式传递数据库配置参数(可直接传值,或确保当前会话能读取环境变量)
shiny_app <- run_app(
  db_server = Sys.getenv("MY_DB_SERVER"),
  db_name = Sys.getenv("MY_DB_NAME"),
  uid = Sys.getenv("MY_DB_UID"),
  pwd = Sys.getenv("MY_DB_PWD")
)

# 启动测试录制
shinytest2::record_test(shiny_app, name = "ShinyGolem")

方式2:在测试文件中预设Golem选项

若需在测试中复用配置,可在测试文件开头预先设置Golem选项,再启动应用:

# tests/testthat/shinytest2/ShinyGolem.R
test_that("ShinyGolem app functions correctly", {
  # 预设Golem配置选项
  golem::set_golem_options(
    db_server = Sys.getenv("MY_DB_SERVER"),
    db_name = Sys.getenv("MY_DB_NAME"),
    uid = Sys.getenv("MY_DB_UID"),
    pwd = Sys.getenv("MY_DB_PWD")
  )
  
  # 初始化应用驱动
  app <- shinytest2::AppDriver$new(app_dir = here::here(), app_args = list())
  
  # 后续测试步骤示例
  app$expect_values()
})

关键注意事项

  • 确保录制/测试的R会话能正确读取所需环境变量:可通过Sys.setenv()在会话中临时设置,或通过项目根目录的.Renviron文件持久化配置。
  • 显式传递参数能避免环境不一致导致的配置丢失问题,不要依赖run_app自动读取环境变量。
  • 修改Golem配置后,需重新执行devtools::load_all()或devtools::install(),确保最新代码被加载。

内容的提问来源于stack exchange,提问作者W_vH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:13:16