【问题标题】:With Roxygen and testthat, what is the proper way to make internal helper functions available to testcases called during R CMD check?使用 Roxygen 和 testthat,使内部辅助函数可用于在 R CMD 检查期间调用的测试用例的正确方法是什么?
【发布时间】:2013-10-17 06:08:02
【问题描述】:

我正在创建一个 R 包,发现将一个文件中的部分逻辑分解为我在同一个文件中定义的内部辅助函数很有用。我有一种特殊情况,我的函数通过match.fun() 决定使用哪个辅助函数。由于它们对其他功能或人员没有用处,因此我不想将它们放在单独的文件中,也不想导出它们。

我所有的测试案例都使用test_dir() 通过。当我不导出这些函数时,我的测试用例在 R CMD 检查期间失败。

"object 'helperfunction1' of mode 'function' was not found", quote(get(as.character(FUN),
         mode = "function", envir = envir)))

查看this post 后,如果我明确导出或添加导出条目到 NAMESPACE,我可以让事情正常工作,但我又不想导出这些。

有没有更好的方法来做到这一点并且不需要我导出? (我承认问题的根源可能是match.fun(),并且我对在运行时调用函数的其他方式持开放态度。)

【问题讨论】:

  • 你不能在那里使用yourPackage:::helperfunction1(...吗? (请注意,这些是 3 个而不是 2 个冒号。)

标签: r roxygen2 testthat


【解决方案1】:

根据记忆,我上次阅读时在文档中并不清楚(它可能已更改),但只要所有内容都在正确的目录中,它就会正常工作(无需导出):

你应该有一个文件:

tests/run-all.R

看起来像:

library(testthat)
library(myPackage)

test_package("myPackage")

那么你的个人测试文件应该在目录inst/tests

这些将在您执行R CMD check 时运行,否则您可以手动在R 中调用test_package("myPackage")

【讨论】:

  • 是的,我有那个测试运行器,但在这种情况下,我不打算在包中提供我的测试,所以它们不在 inst/tests 中。还有其他方法吗?截至目前,我的测试运行器 (tests/run-all.R) 看起来像:library(testthat) test_dir("testthat")
  • 我不确定。我只知道如果文件在inst/tests 中,那么您不需要导出这些测试所依赖的函数。
猜你喜欢
  • 2020-06-17
  • 1970-01-01
  • 2016-06-26
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多