3

testthat パッケージを使用して、より大きなリポジトリ内にある R パッケージをテストしています。R パッケージ外のファイルの内容をテストしたいと思います。

テスト中に R パッケージの外部にあるファイルを参照できますか?

私が試したこと

再現可能な例は、MyRepo.tar.gzとしてダウンロードできます。

私のリポジトリは「myRepo」と呼ばれ、R パッケージ、「myRpkg」、およびその他のスクリプトでいっぱいのフォルダーが含まれています。

~/MyRepo/
~/MyRepo/MyRpkg
~/MyRepo/Scripts

「MyRpkg」のテストは/tests/フォルダーにあります

~/myRepo/myRpkg/tests/test.myscript.R

そして、Scripts フォルダー内のファイルをテストできるようにしたいと考えています。

~/MyRepo/Scripts/myscript.sh

スクリプトを読んで、次のような最初の行の内容をテストしたいと思います。

  check.script <- readLines("../../../Scripts/myscript.sh")[1]
  expect_true(grepl("echo", check.script))

MyRepo ディレクトリから開始すると、これは正常に機能します。

cd ~/MyRepo
R CMD check MyRpkg

しかし、別のディレクトリに移動すると失敗します:

cd
R CMD check MyRepo/MyRpkg
4

1 に答える 1

6

R-exts で言うように

ディレクトリ tests がチェック領域にコピーされ、そのコピーを作業ディレクトリとしてテストが実行され、テスト中にインストールされたパッケージのコピーがライブラリ (pkg_name) によって確実に検出されるように R_LIBS が設定されます。

デフォルトでは、check ディレクトリは現在のディレクトリに作成されます。したがって、R CMD checkから実行する~/MyRepoと、tests ディレクトリがコピーされる~/MyRepo/MyRpkg.Rcheck/testsため、

check.script <- readLines("../../../Scripts/myscript.sh")[1]

と解釈されます

check.script <- readLines("~/MyRepo/Scripts/myscript.sh")[1]

要求に応じ。ただし、から開始する~/ことは意味します

check.script <- readLines("~/Scripts/myscript.sh")[1]

これはあなたが望むものではありません。回避策は、チェック ディレクトリが作成されるディレクトリを指定することです。

R CMD check -o MyRepo MyRepo/MyRpkg

コピーされたtestsディレクトリが元のディレクトリと同じ「祖父母」を持つようにしtestsます。

それでも、ファイルがパッケージの外部にある必要があるのはなぜだろうか。パッケージ テストでファイルを使用する場合は、パッケージにファイルを含めることをお勧めします。インストール時に Scripts ディレクトリがパッケージ ディレクトリにコピーされるように、inst ディレクトリを作成してそこに Scripts ディレクトリを配置することができます。

check.script <- readLines("../foo/Scripts/myscript.sh")[1]

パッケージは R CMD チェック中に MyRpkg.Rcheck/foo にインストールされるため、テスト スクリプト内で使用できます。または、exec ディレクトリを作成し、そこにスクリプト ファイルを配置することもできます。

check.script <- readLines("../foo/exec/myscript.sh")[1]

動作します。これらのソリューションは両方とも、テスト中にインストールされたパッケージを見つけるだけでよいため、R CMD チェックをどこから実行したかは問題ではありません。詳細については、「パッケージ サブディレクトリとパッケージ内の非 R スクリプト」を参照してください。

于 2012-09-13T21:35:11.970 に答える