7

使用 testthat/devtools 基础结构时,跳过 R 包的 test 目录中的所有测试的正确方法是什么?例如,如果没有与数据库的连接并且所有测试都依赖于该连接,我是否需要skip在所有文件中单独写入 a 或者我可以在skip某处写入一个?

我有一个标准的包设置,看起来像

我的包裹/

  • ... # 其他包的东西
  • 测试/
    • 测试那个.R
    • 测试/
      • 测试东西1.R
      • 测试-thing2.R

起初我以为我可以在testthat.R文件中进行测试,例如

## in testthat.R
library(testthat)
library(mypackage)

fail_test <- function() FALSE
if (fail_test()) test_check("package")

但是,这不起作用,看起来调用devtools::test()只是忽略了该文件。我想另一种方法是将所有测试存储在另一个目录中,但是有更好的解决方案吗?

4

2 回答 2

5

R Packages 一书中的跳过测试部分涵盖了这个用例。本质上,您编写了一个自定义函数来检查您需要检查的任何条件——您是否可以连接到您的数据库——然后从需要满足该条件的所有测试中调用该函数。

例子,从书中鹦鹉学舌:

skip_if_no_db <- function() {
  if (db_conn()) {
    skip("API not available")
  }
}

test_that("foo api returns bar when given baz", {
  skip_if_no_db()
  ...
})

我发现这种方法比关闭所有测试的单个开关更有用,因为我倾向于混合使用并且不依赖于我正在检查的任何条件的测试,并且我希望始终运行尽可能多的测试可能的。

于 2017-07-08T21:43:54.287 回答
1

也许您可以在子目录中组织测试,将条件目录包含在父文件夹测试中:

考虑testthat包中的“测试”。特别是,这个看起来很有趣:

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

于 2016-02-06T19:10:09.373 回答