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

时间:2014-07-18 10:54:34

标签: r testthat

我正在使用R中的testthat包,我正在尝试测试一个函数 在文件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

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

4 个答案:

答案 0 :(得分: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))
  }

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

答案 1 :(得分:1)

允许您定义和提供帮助文件的测试(请参见?source_test_helpers

  

Helper脚本是测试脚本附带的R脚本,但前缀为helper。这些脚本在测试运行之前运行一次。

因此,对我来说最有效的方法就是将一个文件“ helper-functions.R”放入要包含在“ / tests / testthat /”中的代码。您不必自己打个电话source_test_helpers(),test那将在您运行测试时自动执行此操作(例如,通过devtools::test()testthat::test_dir())。

答案 2 :(得分:0)

也许检查你的拼写?在这个问题中你同时使用&#34; utilites&#34;和&#34;公用事业&#34;。

答案 3 :(得分:0)

对于我发现的这个问题,没有很好的解决方案,到目前为止,我的工作是使用软件包here在每个测试中设置工作目录。

test_that('working directory is set',{
  setwd(here())
  # test code here
})