- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 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
需要吗?或者我是否必须明确地获取一个通用的帮助文件?
有没有一种方法可以在某处建立一次连接,并使其可用于所有测试并在最后销毁?
最佳答案
来自 testthat
docs
Code in a
setup()
block is run immediately in a clean environment
我相信这意味着如果你想保存在 setup
环境中创建的任何对象,那么你需要将它们放置在全局环境中
setup({
db_con <- db_connect(conf$database, loglevel = "none")
assign("db_con", db_con, envir = .GlobalEnv)
})
然后在你的 teardown()
方法中,它就能找到连接
teardown({
db_disconnect(db_con = db_con, loglevel = "none")
# Can also remove it from the global environment after disconnect
rm(db_con, envir = .GlobalEnv)
})
混入全局环境并不理想,但只要仔细命名并在完成后将其删除,这应该不是问题。
似乎 setup()
更多地是为读取/写入 tempfiles/tempdirs 而设计的,而不是用于创建供所有测试使用的全局对象,但我可能弄错了。
我在研究这个问题时遇到的一个有用的例子:https://github.com/ropensci/Rpolyhedra/blob/3675a3a6eb8b2807f26fb2ebc929b9f5072681db/tests/testthat/test_package_lib.R#L7
关于r - testthat:设置所有测试可用的数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56474392/
我的 R 包修改远程数据库中的数据,我想用 testthat 编写一些测试. 我知道我可以模拟数据库,但我宁愿简单地使用我们的开发数据库。 如何使数据库连接可用于所有需要它的测试,同时确保销毁所有创建
处理生成警告但又返回值的调用的最佳方法是什么? 例如 > require(testthat) > expect_warning(log(-1)) > expect_equal(log(-1), NaN
我想使用“testthat”来测试两个值是否不相等。我可以使用类似的东西来测试相等性 expect_that(x, equals(y)) 但是,如果我期望它们不相等呢?我可以用 expect_fals
我正在构建一个管道工应用程序,并计划使用 TestThat 进行单元测试。但是,当我运行 devtools::test() 时,上面写着 File does not exist: test.R . 我
我有一堆测试,我不希望它们在 CRAN 检查或 Travis CI 构建期间运行。它们要么长时间运行,要么可能导致写入网络数据库的事务/并发冲突。将它们分开的方法(从 R CMD 检查测试中)最适合
我不记得有任何问题,但突然之间,我无法安装任何包,因为 testthat 无法通过测试。作为第 22 条军规,我也无法安装 testthat,因为它无法通过测试。 R version 3.0.1 (2
我想测试一个可以抛出错误的函数,但我也想确保变量值是正确的(以验证错误发生前的预期最后状态 - 所以我想测试不需要的副作用)。可以这样做吗? 要测试的简化表达式 x <- 1 # could a
我正在使用 testthat 来测试具有类似于以下文件树的包: . ├── data │ └── testhaplom.out ├── inst │ └─
我有一个 Shiny 的应用程序,它使用了 4 个函数。我想测试这些功能,但它不是一个包。我应该如何构建我的代码?并在没有开发工具的情况下执行这些测试? 最佳答案 您可以使用 testthat::te
我想测试我的一个函数是否给出特定消息(或警告或错误)。 good <- function() message("Hello") bad <- function() message("Hello!!!!
我正在为一个包编写单元测试,有一些测试我不希望测试在失败时抛出错误,而是给出警告。 这不是我真正的代码,但假设我想测试以下内容: add_x_y <- function(x, y) x + y exp
构建包会导致以下警告: * checking for unstated dependencies in tests ... WARNING ‘library’ or ‘require’ call no
我正在使用 testthat检查我的包裹中的代码。我的一些测试是针对基本功能的,例如构造函数和 getter。其他的用于构建在基本功能之上的复杂功能。如果基本测试失败,那么预计复杂测试也会失败,因此没
我正在使用 Hadley's testthat-based approach用于自动测试我的包。 使用这种方法,最适合放置测试数据文件的位置是仅由测试脚本在 tests/testthat) 中使用的文
当我的 R 包目录结构在测试文件夹中直接包含 R 文件时 . +--Projroot +---- R | -- routine1.R | -- routine2.R +---- tes
我有一个包,我需要在其中使用 testthat 测试文件夹的创建和操作。因此我写了一个测试,它 首先创建文件夹(使用帮助文件)然后 做测试(这很好) 最后删除文件夹(使用名为“test-zz-clea
我正在使用 testthat 包来运行测试,到目前为止我对它非常满意。目前,我正在使用 test_file() 函数运行所有测试并将其结果捕获为数据帧,然后进行一些额外的分析。 但是,我想做的一件事是
问题:我怎样才能得到testthat在加载我的包的环境中运行,而不是从我的包继承? 背景: testthat包运行测试“在从包的命名空间环境继承的环境中”[请参阅文档 test_check ]。这意味
我正在寻找有关出色的 testthat 的最佳实践帮助。放置您的 library(xyzpackage) 调用以使用所有包功能的最佳位置在哪里? 我首先设置了一个 runtest.R 设置路径和包。然
是否有任何工具可以使用 testthat 包评估 R 脚本的代码覆盖率?除了在 an RJournal article 的 future 工作部分提及该主题外,我在 Google 上什么也没找到。 .
我是一名优秀的程序员,十分优秀!