问题:如何让<{1}}在加载我的软件包的环境中运行,而不是继承自 my包装
后台: testthat
包在继承自包名称空间环境的环境中运行测试“[请参阅test_check的文档]。这意味着它无法确保我正确地完成了我的出口,并且这几次被咬了我。
例如,我的包中有以下代码:
testthat
以下在我的测试中:
##' 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
添加一个选项来选择所需的行为?
答案 0 :(得分:1)
使用test_dir
。出于这个原因,我不会使用test_check
。在&#34; /tests/run-tests.R" (文件名并不重要,它只需要在该目录中并以&#34; .R&#34;)结束写:
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 build
和R CMD check
以这种方式运行测试。
如果您的测试不关心工作目录,则setwd
并非绝对必要。但是,如果他们这样做,将复制R CMD check
设置的工作目录。