使用testthat / devtools基础结构时,跳过R包测试目录中所有测试的正确方法是什么?例如,如果没有与数据库的连接并且所有测试都依赖于该连接,我是否需要单独在所有文件中编写skip
,还是可以在某处编写单个skip
? / p>
我有一个标准的包设置,看起来像
mypackage的/
- ...#other package stuff
- 测试/
- testthat.R
- testthat /
- 测试thing1.R
- 测试thing2.R
起初我以为我可以在testthat.R
文件中进行测试,如
## in testthat.R
library(testthat)
library(mypackage)
fail_test <- function() FALSE
if (fail_test()) test_check("package")
但是,这不起作用,看起来调用devtools::test()
只是忽略该文件。我想另一种方法是将所有测试存储在另一个目录中,但是有更好的解决方案吗?
答案 0 :(得分:3)
R Packages一书中的Skipping a test部分涵盖了此用例。基本上,您编写一个自定义函数来检查您需要检查的条件 - 是否可以连接到您的数据库 - 然后从需要满足该条件的所有测试中调用该函数。
示例,从书中鹦鹉学舌:
userId paidAt
1 2017-06-30
1 2017-06-18
2 2017-06-07
4 2017-06-07
3 2017-01-01
2 2017-01-01
2 2017-01-01
2 2017-01-01
我发现这种方法比单个开关更有用,可以关闭所有测试,因为我倾向于混合测试,但不依赖于我正在检查的任何条件,我希望始终以尽可能多的测试。
答案 1 :(得分:1)
也许您可以在子目录中组织测试,将条件目录包含在父文件夹test:
中考虑&#39;测试&#39;在 testthat 包中。 特别是,这个看起来很有趣:
我在这里看不到任何在测试扫描中递归子目录的事情: