問題タブ [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 パッケージの対話型デバッグ
パッケージに変更を加えると、次の問題が発生します。
パッケージ内の関数の 1 つに変更を加えて、それを壊したとしましょう。これにより、単体テストが失敗します(testthatを使用しています)。ただし、それが些細なエラーではなく、RStudio の対話型デバッガーを使用して修正したい場合、これを行う唯一の方法は、単体テスト コードを実際の .R ファイルにカット アンド ペーストすることです。壊れた常駐し、そのファイルを「ソース」します。これは非常に面倒なプロセスです。
誰でもこれを行うためのよりスマートな方法を提案できますか?
r - R の testthat を使用して個々のファイルを単体テストする方法は?
私はちょうど今、R を使った単体テストを始めたばかりで、これまでのところ難しいそりを見つけています。私がやりたいことは、R コンソールに移動し、test()
testthat を入力して、R パッケージ内のすべてのファイルのテストを実行することです。
ここに私の環境があります:
そしてディレクトリ構造:
関連ファイルの次のサンプルを使用します。
数学.R
add.R
testthat.R
test_add.R
エラー:
R コンソールでは、次の結果が得られます。
ただし、作業ディレクトリを切り替えてsetwd('R')
math.R を実行すると、正常にdoubleAdd
機能します。また、math.R を削除するか、「R」ディレクトリから math.R を移動すると、問題なくtest()
動作します。
test()
すべての R ファイルに対してテストを実行するには、これらのファイルをどのようにセットアップすればよいですか?
r - test_that 呼び出し内の評価
パッケージの単体テストを作成しようとしていますが、関数のテストをgls
機能させるのに苦労していnlme
ます。MWE:
何らかの理由で、getData
呼び出しはテスト環境内でデータを見つけることができません。トレースバックは次のとおりです。
それでも、 の外で同じコードを評価してtest_that
もエラーにはなりません:
r - R testthatでメッセージとエラーメッセージを同時にテストする方法は?
接続を生成する関数の単体テストを検討しています。実行中に接続の詳細を含むメッセージを出力します。
以下をテストしたい:
- メッセージは期待どおりに表示されます (
expect_message(fn(),"blah")
) - エラーはありません (
expect_error(fn(),NA)
) - 作成されたオブジェクトは特定のクラスです (
expect_is(fn(),"PostgreSQLConnection")
)
私はres<-fn()
それを実行してexpect_is()
から実行することができましたが、関数を呼び出している間にメッセージとエラー (の欠如) の両方でテストを実行するにはどうすればよいでしょうか。
理想的には、3 つすべてを同時に評価し、後で安全に接続を閉じることができるようにしたいと考えています。
PSexpect_message
および関数は、非推奨であるかどうかにかかわらず、次のexpect_error
ような関数を使用します。ドキュメントはその点で少し混乱しています。throws_error
?throws_error
r - r - data.table および testthat パッケージ
data.table で動作し、パッケージ testthat を使用してテストする必要があるパッケージを作成しています。コマンド ラインから呼び出すとコードは正常に動作しますが、テスト ケースから呼び出すと問題が発生します。テストの実行時に、ベース パッケージの [] 関数、つまり data.frames の関数が使用されているようです。
ここにある最小限の例を作成しました: https://github.com/utalo/test_datatable_testthat
パッケージには単一の機能が含まれています。
test.datatable.testthat:::test()
コマンドラインから呼び出すと、期待される結果が得られます。
ただし、次の単体テストを実行する場合:
エラーが発生します:
ご覧のとおり、テスト内で data.frame の [] が呼び出されます。私の最初の推測は、data.table パッケージへの依存関係が正しく宣言されていないということでした。これは私の記述ファイルです:
Using data.table package inside my own packageによると、依存パッケージとして data.table を宣言するだけで十分です。ただし、ここではそうではないようです。
testthat のコンテキストではなく、直接呼び出されたときに関数が機能する理由についての手がかりはありますか?
r - 関数/パッケージで data.table を使用する (roxygen を使用)
私はRにはまったく慣れていませんが、この質問は次の投稿1、2、3と少し異なるトピック4に密接に関連しているようです。残念ながら、私はすぐにコメントできるほどの評判がありません。私の問題は、そこにあるすべての提案を行った後でも、コードがまだ機能しないことです:
- 説明ファイルに「Depends」を含めました
NAMESPACEの変更を含む2番目の方法を試しました(再現できません)- コードの非常に小さな部分を含むサンプル パッケージ を作成しましたが
"J" not found in routes[J(lat1, lng1, lat2, lng2), .I, roll = "nearest", by = .EACHI]
、(ではなく'lat1' not found in routes[order(lat1, lng1, lat2, lng2, time)]
)少し異なるエラーが表示されました。 - コンソールと R スクリプトを使用して、すべてのスクリプトをテストしました。そこでは、コードは問題なく実行されました。
ご支援ありがとうございました!
編集:@ローランド
- あなたが正しいです。Roxygen は名前空間を上書きします。関数に含める
#' @import data.table
必要があります。なぜDepends: data.table
DESCRIPTIONファイルに挿入するだけではうまくいかないのか分かりますか? これはドキュメントの役に立つヒントになるかもしれません。 - routes <- routes[order("lat1", "lng1", "lat2", "lng2", "time")] に変更すると、この行が突然問題にならなくなったため、少なくとも少しは役に立ちました。この場合、data.frame オーダーが使用されるのは正しいですか? 私は今どこまで行くのか見ていきます。最終結果はまたお知らせします…