問題タブ [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.

0 投票する
1 に答える
186 参照

r - R パッケージの対話型デバッグ

パッケージに変更を加えると、次の問題が発生します。

パッケージ内の関数の 1 つに変更を加えて、それを壊したとしましょう。これにより、単体テストが失敗します(testthatを使用しています)。ただし、それが些細なエラーではなく、RStudio の対話型デバッガーを使用して修正したい場合、これを行う唯一の方法は、単体テスト コードを実際の .R ファイルにカット アンド ペーストすることです。壊れた常駐し、そのファイルを「ソース」します。これは非常に面倒なプロセスです。

誰でもこれを行うためのよりスマートな方法を提案できますか?

0 投票する
1 に答える
3533 参照

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 ファイルに対してテストを実行するには、これらのファイルをどのようにセットアップすればよいですか?

0 投票する
0 に答える
139 参照

r - test_that 呼び出し内の評価

パッケージの単体テストを作成しようとしていますが、関数のテストをgls機能させるのに苦労していnlmeます。MWE:

何らかの理由で、getData呼び出しはテスト環境内でデータを見つけることができません。トレースバックは次のとおりです。

それでも、 の外で同じコードを評価してtest_thatもエラーにはなりません:

0 投票する
2 に答える
704 参照

r - R testthatでメッセージとエラーメッセージを同時にテストする方法は?

接続を生成する関数の単体テストを検討しています。実行中に接続の詳細を含むメッセージを出力します。

以下をテストしたい:

  1. メッセージは期待どおりに表示されます ( expect_message(fn(),"blah"))
  2. エラーはありません ( expect_error(fn(),NA))
  3. 作成されたオブジェクトは特定のクラスです ( expect_is(fn(),"PostgreSQLConnection"))

私はres<-fn()それを実行してexpect_is()から実行することができましたが、関数を呼び出している間にメッセージとエラー (の欠如) の両方でテストを実行するにはどうすればよいでしょうか。

理想的には、3 つすべてを同時に評価し、後で安全に接続を閉じることができるようにしたいと考えています。

PSexpect_messageおよび関数は、非推奨であるかどうかにかかわらず、次のexpect_errorような関数を使用します。ドキュメントはその点で少し混乱しています。throws_error?throws_error

0 投票する
1 に答える
1298 参照

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 のコンテキストではなく、直接呼び出されたときに関数が機能する理由についての手がかりはありますか?

0 投票する
2 に答える
407 参照

r - 関数/パッケージで data.table を使用する (roxygen を使用)

私はRにはまったく慣れていませんが、この質問は次の投稿1、2、3少し異なるトピック4に密接に関連しているようです。残念ながら、私はすぐにコメントできるほどの評判がありません。私の問題は、そこにあるすべての提案を行った後でも、コードがまだ機能しないことです:

  1. 説明ファイルに「Depends」を含めました
  2. NAMESPACEの変更を含む2番目の方法を試しました(再現できません)
  3. コードの非常に小さな部分を含むサンプル パッケージ を作成しました"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)])少し異なるエラーが表示されました。
  4. コンソールと R スクリプトを使用して、すべてのスクリプトをテストしました。そこでは、コードは問題なく実行されました。

ご支援ありがとうございました!

編集:@ローランド

  1. あなたが正しいです。Roxygen は名前空間を上書きします。関数に含める#' @import data.table必要があります。なぜDepends: data.tableDESCRIPTIONファイルに挿入するだけではうまくいかないのか分かりますか? これはドキュメントの役に立つヒントになるかもしれません。
  2. routes <- routes[order("lat1", "lng1", "lat2", "lng2", "time")] に変更すると、この行が突然問題にならなくなったため、少なくとも少しは役に立ちました。この場合、data.frame オーダーが使用されるのは正しいですか? 私は今どこまで行くのか見ていきます。最終結果はまたお知らせします…