Testthat: すべてのテストを実行し、エラーで停止しますか?

作成日 2016年04月19日  ·  5コメント  ·  ソース: r-lib/testthat

すべてのテストを実行し、エラーが発生した場合に停止する関数のように思えます。 レポーターstopはエラーで停止し、デフォルトの動作ですべてのテストが実行されますが、これらを便利に組み合わせることができるものは何もありません。

ユーザーにとってはほんの数行のコードです。

results <- devtools::test(".")
results_df <- data.frame(results)
if (any(results_df$failed | results_df$error)) {
  stop(sprintf("Failed: %s, Error: %s", sum(results_df$failed), sum(results_df$error)))
}

しかし、これは十分に一般的であるように思われ(たとえば、ほとんどの場合、CIサーバーで必要なものです)、ヘルパー関数またはそのためのレポーターが適している可能性があります。

最も参考になるコメント

あなたのニーズによりよく合うかもしれないFailReporterもあります: devtools::test(reporter = c("summary", "fail"))

全てのコメント5件

レポーターを組み合わせることができます: devtools::test(reporter = c("summary", "stop"))

それは私が説明したことをしていないようです-すべてのテストに関する情報がコンソールにあり、いずれかが失敗した場合は適切なゼロ以外の終了コードが必要です。

あなたのニーズによりよく合うかもしれないFailReporterもあります: devtools::test(reporter = c("summary", "fail"))

同じ問題があるように見えますか? テストは最初の失敗で実行を停止します。

ユースケース(かなり一般的であると予想されます)を明確にするために、CIサーバー(Jenkins)で単体テストを実行しています。 Jenkinsは、テストが失敗した場合に適切に失敗するためにゼロ以外の終了コードを必要としますが、最初の失敗だけでなく、すべての失敗を確認したいと思います。

具体的な例としてJenkinsを挙げていますが、この状況は他のCIサーバーなどでも発生すると思います。

上記の私のスクリプトは目標を達成しますが、少しもろいです(たとえば、新しいバージョンのパッケージで結果列の名前が変更された場合、動作を停止します)が、これは組み込みのソリューションを保証するのに十分一般的です。

私はあなたのユースケースを理解していると思います。 私のシステムでは、 reporter = c("summary", "fail")はアドバタイズされたとおりに機能します。すべてのテストが実行され、最後にstop()が呼び出されます。 何が機能していないかを示すために、reprexを送信していただけますか?

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