我正在使用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
您能否澄清一下如何为源自另一个文件的文件中的函数运行测试?
答案 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
})