21

R でパッケージを使用してtestthatおり、 file で定義された関数をテストしようとしています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

3 に答える 3

12

少し遅いかもしれませんが、解決策を見つけました。Test_that は、テスト ファイルを保持しているディレクトリを現在の作業ディレクトリとして設定します。以下の test-files.r のコードを参照してください。これにより、作業ディレクトリが /tests になります。したがって、メイン スクリプトは source ("../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("..") を追加し、パスなしでファイル名を単にソースすることでした。source("../file.R") の代わりに source("file.R")。私にはうまくいくようです。

于 2015-01-14T17:23:53.707 に答える
0

私が見つけたこの問題に対する優れた解決策はありません。これまでのところ、パッケージを使用して各テスト内に作業ディレクトリを設定することhereでした。

test_that('working directory is set',{
  setwd(here())
  # test code here
})
于 2020-10-28T21:26:59.610 に答える