首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“Testing”测试包导出

使用“Testing”测试包导出
EN

Stack Overflow用户
提问于 2015-10-23 15:06:56
回答 1查看 127关注 0票数 4

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

背景: testthat包在“从包的命名空间环境继承的环境中”运行测试(参见检查的docs )。这意味着这并不能保证我的出口做对了,而且这让我被咬了好几次。

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

代码语言:javascript
复制
##' 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")
}

在我的测试中:

代码语言:javascript
复制
x <- 5:13
foo(x)

测试还不错。但是,如果用户安装了包,他们将得到以下错误:

代码语言:javascript
复制
Error in UseMethod("foo") : 
  no applicable method for 'foo' applied to an object of class "c('integer', 'numeric')"

解决方案是为这两种方法放置@exports声明,但是测试没有捕捉到这一点,这是一个令人遗憾的问题。

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

EN

回答 1

Stack Overflow用户

发布于 2017-04-11 14:52:30

使用test_dir。我使用test_check并不是因为这个原因。在“/test/run-tests.R”(文件名并不重要,它只需位于该目录并以“.R”结尾)中,编写:

代码语言:javascript
复制
library(testthat)
library(<my package>)  # insert actual package name here
test_dir('testthat')   # assuming your tests are in "tests/testthat"

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

代码语言:javascript
复制
setwd("<pkg dir>/tests")
source("run-tests.R")

或从命令行:

代码语言:javascript
复制
cd <pkg-dir>/tests
Rscript run-tests.R

或者用R CMD buildR CMD check的方式运行测试。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33305664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档