问题: 如何让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
添加选项来选择所需的行为?