Testthat: トップレベルでの `test_package`と` test_check`の紛らわしい振る舞い

作成日 2015年05月13日  ·  6コメント  ·  ソース: r-lib/testthat

推奨されているように、 lubridateテストはtests/testthatます。 ドキュメントから、手動でテストを実行するには、 test_checkを使用する必要があると推測されますが、失敗します。

> test_check("lubridate")
Error: No tests found for lubridate

紛らわしいことにtest_package("lubridate")機能します。

最も参考になるコメント

ドキュメントがあいまいであることに同意します。 すべてのテストを実行する正しい方法がdevtools::tests()を使用することであるという難しい方法を学ばなければなりません

「ディレクトリ内のテストのコレクションにはtest_dir()を使用します。コンソールでインタラクティブにtest_package()を使用し、R CMDチェック内でtest_check()を使用します。」

devtoolsを使用してテストを実行することについては言及されていません。

全てのコメント6件

test_check()対話的に実行すべきではない、それは作業ディレクトリがあることを想定していtests/それが実行されているときのようにR CMD checktest_package(X)は、インストールされたテストのみを実行するため、実際にはインタラクティブに実行するべきではありません。したがって、それらを変更したがインストールしていない場合は、古くなっています。

開発中にテストを実行する場合、推奨される方法はdevtools::test() (または対応するRstudioボタン)です。

test_check()はインタラクティブに実行するべきではありません。RCMDチェックを実行するときのように、作業ディレクトリがtests /であると想定します。 test_package(X)は、インストールされたテストのみを実行するため、実際にはインタラクティブに実行するべきではありません。したがって、テストを変更したがインストールしていない場合は、古くなっています。

これは、ドキュメントに記載するのに適した説明です。 私はこれを忘れて、今から半年後に同じバグを開くでしょう。

開発中にテストを実行する場合は、devtools :: test()(または対応するRstudioボタン)をお勧めします。

別のパッケージを使用してtestthatテストを実行することは意味がありません。 これが「デザイン」である場合は、これもドキュメントに追加してください。

テストの実行は簡単です。 パッケージをインストールせずにRコードを確実にロードするのは難しいです。 したがって、パッケージをインストールしてtest_package()でテストを実行するか、 devtools::test()ます。

パッケージをインストールせずにRコードをロードするのは難しい

この問題の理由は、ロードせずに実行できるかどうかではなく、紛らわしく不完全なドキュメントに関するものです。 現在のドキュメントには次のように書かれています。

     Use ‘test_package’ to test an installed package, or in
     ‘tests/test-all.R’ if you're using the older ‘inst/tests’
     convention.

     If your tests live in ‘tests/testthat’ (preferred) use
     ‘test_check’ in ‘tests/testthat.R’.  You still use ‘test_package’
     when testing the installed package.

最初のパラグラフのorはどういう意味ですか? 2番目のパラグラフの最後の文は、インストールされていないパッケージにはtest_checkを使用する必要があることを示しています。

これらの2つの段落は混乱を招き、おそらく正しくないことに同意していただければ幸いです。 私が前に言ったように、私は漠然とそれらのラインから推測することができることを唯一の結論は、私が実行します(インストールパッケージに)それであるtest_check新しいスタイルにし、 test_packageディレクトリの古いスタイルに。

上記に関連するかもしれない/関連しないかもしれないこれに遭遇する将来の人々のために:

pkgname.Rcheckpkgnameより上のレベルにまだ存在しているときに、この問題が発生しました。 以前にテストなしでパッケージをチェックしたことがありますが、チェックの1つを強制終了したと思われるため、 pkgname.Rcheckまだ存在していました。

パッケージディレクトリでこれを実行することをお勧めします。

pkg_name = read.dcf("DESCRIPTION")[, "Package"]
unlink(file.path("..", paste0(pkg_name, ".Rcheck")))

ただし、より堅牢なアプローチとしてhere::here()を使用することもできます。

library(here)
pkg_name = read.dcf("DESCRIPTION")[, "Package"]
unlink(here("..", paste0(pkg_name, ".Rcheck")))

ドキュメントがあいまいであることに同意します。 すべてのテストを実行する正しい方法がdevtools::tests()を使用することであるという難しい方法を学ばなければなりません

「ディレクトリ内のテストのコレクションにはtest_dir()を使用します。コンソールでインタラクティブにtest_package()を使用し、R CMDチェック内でtest_check()を使用します。」

devtoolsを使用してテストを実行することについては言及されていません。

このページは役に立ちましたか?
0 / 5 - 0 評価