当条件不满足时,跳过所有测试

时间:2016-01-09 08:07:24

标签: r package devtools testthat

使用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()只是忽略该文件。我想另一种方法是将所有测试存储在另一个目录中,但是有更好的解决方案吗?

2 个答案:

答案 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 包中。 特别是,这个看起来很有趣:

我在这里看不到任何在测试扫描中递归子目录的事情: