2014-07-18 30 views
12

我在R中使用testthat包,我試圖測試在文件example.R中定義的函數 。這個文件包含一個調用source("../utilities/utilities.R"),其中utilities.R是一個由我寫的函數。然而,當我試圖從example.R測試功能,測試腳本內採購它提供了以下錯誤:在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

你有沒有嘗試把這個文件放在同一個文件夾中? – Andrie

+0

將文件放在同一個目錄中,並將其作爲source(「utilities.R」)放在'example.R'中並沒有幫助:我收到了類似的錯誤消息。 – paljenczy

回答

8

可能有點晚,但我找到了解決方案。 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(「」),並簡單的將文件名不帶路徑。源(「file.R」)而不是源(「../ file.R」)。似乎爲我工作。

+0

由於我的測試,數據和函數都在單獨的文件夾中,我發現我需要將工作目錄分配爲wd < - file.path(getwd(),'..'),然後指定一個functions_dir < file.path(wd,'functions')和 data_dir < - file.path(wd,'data')在幫助程序文件中。然後每個測試文件都可以訪問這些變量來獲取其功能和數據。 – Todd

1

也許檢查你的拼寫?在你使用「utilites」和「utilities」的問題中。