問題タブ [testthat]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - R CMD チェック用に testthat をセットアップするには?
と統合するには明らかに 2 つの方法がありtestthat
ますR CMD check
。私はどちらも働くことができません。
アプローチ #1: (おそらく非推奨)
devtools wikiによると:
パッケージを開発するときは、テストを inst/tests に置き、次のコードを含むファイル tests/run-all.R (大文字の R でなければならないことに注意してください) を作成します。
これにより、パッケージの名前空間でテストが評価され (エクスポートされていない関数をテストできるようになります)、テストの失敗がある場合はエラーがスローされます。これは、テストの失敗の完全なレポートが表示され、すべてのテストに合格しない限り R CMD チェックに合格しないことを意味します。
パッケージ全体はこちら. その中には、次の 2 つのファイルがあります。
と
私の説明は
パッケージをインストールした後、テストを問題なく実行できます (予想どおり失敗します)。
しかし、R CMD check
テストは実行されません。
PDF の警告がこれと関係があるとは思いませんが、要求があれば詳細を提供できます。
アプローチ #2: (ブリーディング エッジ)
ここで、tests/testthat にテストを配置し、次のコードを tests/test-all.R に配置して R CMD チェックが確実に実行されるようにすることをお勧めします。
そのため、testthat の最新バージョンがインストールされていることを確認しました。
そして、パッケージを変更しました。このバージョンはこちらから入手できます。2つのファイルを次のように変更しました
と
次に、DESCRIPTION ファイルでパッケージのバージョンを 0.1.2 に更新すると、ビルドしてインストールし、testthat
チェックして以前と同じ出力を得ることができます。したがって、testthat
関係する限り、その作業のようです。
ただし、R CMD チェックはまだテストを実行しません。
だから質問:
私は何を間違っていますか?私の好みはアプローチ 2 の解決策ですが、いずれかを採用します。
r - 保存された R オブジェクトに対するテスト
オブジェクトを .rds または .rda として保存するテストを記述して、将来のテスト実行でコード実行の結果と保存されたオブジェクトを比較できるようにする簡単なワークフローはありますか? これにより、やや複雑な値を返す関数が正常に動作していることを簡単に確認できます。
たとえば、次のようなものです。
これは、*extdata/test_obj.res.rds* が存在しない場合、上から *inst/extdata/test_obj.res.rds* に作成されますが、res
存在する場合は、identical/all.equal などになります。 . rds から復元されたオブジェクトを含む、新しく生成されたオブジェクト。
私はそのようなテストが非常に便利だと思います.RUnit / svUnit / testthatがそのようなものを実装していないことに少し驚いています.
testthat::make_expectation
は近いですが、テキスト表現をコピーしてファイルに貼り付けるよりも、自動化されたストア/取得 rds を使用することをお勧めしますtestthat::make_expectation
。 R ファイルですが、それでもプロセスを容易にする自動化が少しあります)。
r - Roxygen と testthat を使用して、R CMD チェック中に呼び出されるテストケースで内部ヘルパー関数を使用できるようにする適切な方法は何ですか?
R パッケージを作成していますが、1 つのファイル内のロジックの一部を、同じファイル内で定義する内部ヘルパー関数に分割すると便利であることがわかりました。関数が を介して使用するヘルパー関数を決定する特殊なケースがありますmatch.fun()
。それらは他の機能や人々にとって役に立たないので、これらを別のファイルに入れたくないし、エクスポートしたくありません。
を使用して合格するすべてのテストケースtest_dir()
。これらの関数をエクスポートしないと、R CMD チェック中にテストが失敗します。
この投稿を見た後、エクスポート エントリを NAMESPACE に明示的にエクスポートまたは追加すると、動作させることができますが、これらをエクスポートしたくありません。
これを行うためのより良い方法はありますか?エクスポートする必要はありませんか? match.fun()
(問題の原因は、実行時に関数を呼び出す他の方法である可能性があり、またその可能性があることを認めます。)
r - R: ローカル環境内での testthat test_file() の問題
ローカル環境内での test_file の呼び出しに問題があります。
正常に動作します。
正常に動作します。
エラー: オブジェクト 'newvar' が見つかりません
simple.test.R の内容は次のとおりです。
助けてください!ありがとう。
編集:
私がやろうとしているのは、shinyAce ( https://github.com/trestletech/shinyAce ) からいくつかのコードを読み取り、それが有効であることを確認することです (いくつかの定義された要件を満たしています)。'local()' を使用して、shinyAce ブロックで定義された割り当てられた変数が環境に残らないようにしました。
r - testthat: 警告と値の両方を処理する
警告を生成するが値を返す呼び出しを処理する最良の方法は何ですか?
例えば
log(-1) への呼び出しが (a) 警告を生成し、(b) 値 NaN を返すようにテストを記述したいと考えています。上記の方法は機能しますが、下部に「警告メッセージ:」が表示されると、混乱する可能性があります。警告を一時的に抑制する必要がありますか?
r - test_package がパスしても auto_test_package がエラーをスローする
を使用して R パッケージのテストを作成しようとしていますtestthat
。testthat
との両方devtools
が を使用してインストールされinstall_github
、テスト コードは と にありtests/testthat
ます。R CMDチェックを使用して取得test-all.R
tests
- テストをチェックしています ... 'test-all.R' を実行しています OK
と
>test()
FASTIN のテスト中
FASTIN IO テストのロード中
: ......
同様に
> test_package('FASTIN')
IO テスト : ......
私の最初のテストの経験に非常に満足しており、今後の開発を「auto_test_package」で自動監視したいと思いましたが、パッケージのルート ディレクトリから 9it を呼び出すと、次の結果が得られます。
>auto_test_package('./')
IO テスト: ......
ダイジェストのエラー (パス、ファイル = TRUE): 指定されたパス名はファイルではありません: /Users/phil/Work/FASTIN-R/FASTIN-R /tests/testthat
これは、テストが実行されることを意味していると思いますが、テストが完了すると何か問題が発生しますか? これを手動で設定しようとするとauto_test
、同じエラーが発生します。
>auto_test('./R/', './tests/')
IO テスト: ......
ダイジェストのエラー (パス、ファイル = TRUE): 指定されたパス名はファイルではありません: /Users/phil/仕事/FASTIN-R/FASTIN-R/tests/testthat
auto_test
代わりに使用するように設定しようとしましtest/testthat
たが、今回はテストは実行されますが、エラーもスローされます...
auto_test('./R/','./tests/testthat/')
IO テスト : 12
1. エラー: SI インポートは正常に動作します -------------------- -------------------------------------------------- --------------------
nchar(SI.predators) > 0 & nchar(SI.preys) > 0 は TRUE ではありません
1: addSI(SI.predators = SI.捕食者、SI.preys = SI.preys、Frac.Coeffs.mean = Frac.Coeffs.mean、Frac.Coeffs.var = Frac.Coeffs.var) test_io.R:10
2: stopifnot(nchar(SI.predators) > 0 & nchar(SI.preys) > 0) at /Users/phil/Work/FASTIN-R/FASTIN-R/R/DataIO.R:56
3: stop(sprintf(ngettext(length(r), "% s is not TRUE", "%s are not all TRUE"), ch), call. = FALSE, domain = NA)
ここで何が間違っていますか?私は少し困惑しており、testthat
github のコードですぐに答えが見つかりませんでした...
どんな助けでも大歓迎です!乾杯
r - r devtools test() エラーですが、testthat test_file() は機能します
私が構築しているパッケージには、アナリストが使用するグローバル環境に 16 進コードを割り当てる機能があります...
私の単体テストコードは次のとおりです。
コードを手動で実行すると、エラーは発生しません。
test_file() を実行してもエラーにはなりません
ただし、devtools ワークフローの一部としてテストを実行すると、次のようになります。
なぜこれが起こっているのか、どうすれば状況を解決できるのか、誰にもアイデアがありますか?
r - テストにexpect_no_warnings()のようなものはありますか?
ある条件下で警告を生成する関数のテストを書いています。他の条件下では警告が生成されないようにしたいと考えています。で簡単にテストする明白な方法がわかりませんtestthat
。私は次のようなことができると思います:
またはを使用options(warn=2)
しますが、次のようなものがあることを望んでいました:
明らかな何かが欠けていますか?
r - test_file() は機能しますが、test() は data.table で失敗します
私の質問はr devtools test() errors but testthat test_file() worksに似ていますが、@hadley のコメントがここにも当てはまるかどうかはわかりません。
個々のファイルのテストは機能しますが、パッケージtestthat::test_file
のテストは機能しdevtools::test
ません。
これが私のパッケージの唯一のRファイルですR/a.R
:
ここに私のテストファイルがありますinst/tests/test-a.R
:
を実行するとそのテストに合格しますがtest_file
、実行するdevtools::test
と次のエラーが表示されます。
それは適切な動作ですか、それともまたはのバグと見なす必要がありますdata.table
かdevtools
?
ここに私の環境があります:
更新します。data.table
hereに正しく依存するようにパッケージの依存関係を更新しましたが、問題はまだ存在します。