4

问题:我如何才能在加载我的包而不是从我的包继承testthat的环境中运行?

背景:包在“从包的命名空间环境继承的环境中”testthat运行测试[参见test_check的文档]。这意味着它不能确保我已经正确地完成了我的导出,这让我被咬了好几次。

例如,我的包中有以下代码:

##' The foo() method
##' @param x object
##' @export
foo <- function(x)
  UseMethod('foo')

##' @rdname foo
foo.data.frame <- function(x) {
  message("foo data.frame")
}

##' @rdname foo
foo.default <- function(x) {
  message("foo default")
}

在我的测试中如下:

x <- 5:13
foo(x)

那测试就好了。但是如果用户安装了这个包,他们会得到这个错误:

Error in UseMethod("foo") : 
  no applicable method for 'foo' applied to an object of class "c('integer', 'numeric')"

解决方案是@exports为这两种方法声明,但测试没有捕捉到这一点真是太可惜了。

我更愿意从用户的角度运行我的所有测试,因为有时我倾向于搞砸我的导出。也许可以添加一个选项来testthat:::run_tests选择所需的行为?

4

1 回答 1

1

使用test_dir. 我不使用test_check这个确切的原因。在“/tests/run-tests.R”(文件名无关紧要,只需要在该目录中并以“.R”结尾)中写入:

library(testthat)
library(<my package>)  # insert actual package name here
test_dir('testthat')   # assuming your tests are in "tests/testthat"

然后,为了运行您的测试:

setwd("<pkg dir>/tests")
source("run-tests.R")

或者从命令行:

cd <pkg-dir>/tests
Rscript run-tests.R

或者这样做R CMD buildR CMD check以这种方式运行测试。

setwd如果您的测试不关心工作目录,则不是绝对必要的。但是,如果他们这样做,将复制由R CMD check.

于 2017-04-11T14:52:30.923 回答