在R中测试:在测试文件中采购

pal*_*czy 17 r testthat

我正在使用testthatR中的包,我正在尝试测试文件中定义的函数example.R.此文件包含一个调用source("../utilities/utilities.R"),其中包含utilities.R由我编写的函数的文件.但是,当我尝试测试函数时example.R,在测试脚本中获取它会产生以下错误:

Error in file(filename, "r", encoding = encoding) : 
  cannot open the connection
In addition: Warning message:
In file(filename, "r", encoding = encoding) :
  cannot open file '../utilities/utilities.R': No such file or directory
Run Code Online (Sandbox Code Playgroud)

您能否澄清一下如何在源自另一个文件的文件中运行函数测试?

小智 9

可能会有点晚,但我找到了解决方案.Test_that将包含测试文件的目录设置为当前工作目录.请参阅test-files.r中的以下代码.这会导致工作目录为/ tests.因此,您的主脚本需要源("../file.R"),它适用于测试,但不适用于运行您的应用程序.

https://github.com/hadley/testthat/blob/master/R/test-files.r

source_dir <- function(path, pattern = "\\.[rR]$", env = test_env(),
                       chdir = TRUE) {
  files <- normalizePath(sort(dir(path, pattern, full.names = TRUE)))
  if (chdir) {
    old <- setwd(path)
    on.exit(setwd(old))
  }
Run Code Online (Sandbox Code Playgroud)

我发现的解决方案是在我的测试文件中添加setwd(".."),只是在没有路径的情况下获取文件名.source("file.R")而不是source("../ file.R").似乎为我工作.


hpl*_*ger 5

允许您定义和获取帮助文件的测试(请参阅 参考资料?source_test_helpers):

辅助脚本是伴随测试脚本的 R 脚本,但以helper. 这些脚本在运行测试之前运行一次。

所以对我来说完美的是简单地将一个文件“helper-functions.R”包含在“/tests/testthat/”中,其中包含我想要获取的代码。您不必调用source_test_helpers()自己, testthat 会在您运行测试时自动执行此操作(例如,通过devtools::test()testthat::test_dir())。