在R包testthat测试中使用memdb_frame报错:找不到RSQLite包
解决R包testthat测试中memdb_frame依赖RSQLite的报错问题
问题描述
- 为R包开发了操作dbplyr数据库连接的函数,交互式测试时用
memdb_frame()创建虚拟数据库可正常运行:x <- memdb_frame(caseID = 1, DOB = 2, Other = 3) - 但在包的
testthat测试流程中,使用相同代码创建数据库时触发报错:Error in `(function (cond) .Internal(C_tryCatchHelper(addr, 1L, cond)))(structure(list(message = "there is no package called 'RSQLite'", call = loadNamespace(x), package = "RSQLite", lib.loc = NULL), class = c("packageNotFoundError", "error", "condition")))`: error in evaluating the argument 'drv' in selecting a method for function 'dbConnect': there is no package called 'RSQLite' - 此前遇到过类似的RMySQL依赖报错,通过将RMySQL添加到包的Suggests列表解决,当前包的Suggests配置为:
Suggests: dbplyr, knitr, rmarkdown, RMySQL, sf, testthat (>= 3.0.0), tibble, tidygraph - 错误回溯信息显示,调用链最终指向
DBI::dbConnect(RSQLite::SQLite(), ":memory:", create = TRUE),说明测试环境中未加载RSQLite。
解决方案
- 打开包的
DESCRIPTION文件,将RSQLite添加到Suggests列表中,更新后的配置如下:Suggests: dbplyr, knitr, rmarkdown, RMySQL, RSQLite, sf, testthat (>= 3.0.0), tibble, tidygraph - 原理:交互式环境中可能已全局安装并加载RSQLite,但包的测试环境是独立隔离的,只有在Suggests中声明依赖,测试框架才会确保该包被安装并可调用,从而解决
memdb_frame()底层依赖RSQLite创建内存数据库的问题。
内容的提问来源于stack exchange,提问作者Sam Firke
相关产品推荐
相关产品推荐

