R testthat:设置可用于所有测试的数据库连接

R testthat:设置可用于所有测试的数据库连接,r,database-connection,testthat,R,Database Connection,Testthat,我的R包修改远程数据库中的数据,我想用testthat编写一些测试 我知道我可以模拟数据库,但我宁愿简单地使用一个我们的开发数据库 如何使db连接可用于所有需要它的测试,同时确保创建的任何连接都已销毁?很明显,连接应该在设置中进行,断开连接应该在拆卸中进行,但我没有成功 我曾尝试将以下代码放入tests/testthat.R或助手文件tests/testthat/helper-\u,但没有成功 设置({ #db_connect只是RMariaDB::dbConnect和日志的基本包装器 db_c

我的R包修改远程数据库中的数据,我想用
testthat
编写一些测试

我知道我可以模拟数据库,但我宁愿简单地使用一个我们的开发数据库

如何使db连接可用于所有需要它的测试,同时确保创建的任何连接都已销毁?很明显,连接应该在
设置中进行,断开连接应该在
拆卸中进行,但我没有成功

我曾尝试将以下代码放入
tests/testthat.R
或助手文件
tests/testthat/helper-\u
,但没有成功

设置({
#db_connect只是RMariaDB::dbConnect和日志的基本包装器

db_con编辑:test-connect_init中的dbDisconnect。此结构在从数据库接收数据(一次或几次)的工作流中效果最佳

免责声明:以下内容已通过Impala成功测试

我选择了寻源方式,创建了一个在脚本和测试中调用的connect_init.R函数:

组织
R
├── 乌提尔斯
|   ├── connect_init.R
|   ├── df_import.R
├── 清洁的
|   ├── 数据_clean.R
测验
├── 测试
│   ├── 测试连接.R
│   ├── 测试导入.R
│   └── 测试清洁
└── testthat.R
过程 connect_init.R
connect_init从
testthat

setup()块中的代码立即在干净的环境中运行

我相信这意味着,如果您想保存在
设置
环境中创建的任何对象,那么您需要将它们放置在全局环境中

设置({

db_con因此,换句话说,您在每个测试中手动连接和断开连接?如果是,必须有更好的方法…在这种情况下,如果其中一个测试失败,连接将保持打开状态(而
拆卸
即使测试失败也始终运行)。您是对的:-我需要在测试-连接中添加断开连接(它包含在测试导入中)。-此处提出的过程没有针对您的工作流进行优化(我在从Impala导入一次(或几次)数据时使用了它)。
tests
├── testthat
│   ├── helper-_.R
│   ├── test-connect.R
│   └── test-questions.R
└── testthat.R