【发布时间】:2019-10-21 18:50:07
【问题描述】:
我的 R 包修改了远程数据库中的数据,我想用testthat 编写一些测试。
我知道我可以模拟数据库,但我宁愿简单地使用我们的开发数据库。
如何使数据库连接对所有需要它的测试可用,同时确保创建的任何连接都被破坏?很明显,连接应该发生在 setup 中,而断开连接应该发生在 teardown 中,但我没有管理。
我尝试将以下代码放在tests/testthat.R 或帮助文件tests/testthat/helper-_ 中,但无济于事。
setup({
# db_connect is just a basic wrapper around RMariaDB::dbConnect with logging
db_con <- db_connect(conf$database, loglevel = "none")
})
teardown({
# db_connect is just a basic wrapper around DBI::dbDisconnect with logging
db_disconnect(db_con = db_con, loglevel = "none")
})
我最初的测试是:
tests
├── testthat
│ ├── helper-_.R
│ ├── test-connect.R
│ └── test-questions.R
└── testthat.R
在第一个文件(所有测试都通过)之后,我得到了Error in DBI::dbDisconnect(db_con) : object 'db_con' not found,这表明正在拆除,但没有找到db_con。
之后,所有需要db_con 的测试都会失败并显示object 'db_con' not found。
我是否必须为每个需要db_con 的文件创建一个帮助文件?还是我必须明确地获取一个通用的帮助文件?
有没有一种方法可以让我在某个地方建立一次连接,然后让它可用于所有测试并在最后销毁?
【问题讨论】:
标签: r database-connection testthat