すべてのテストを実行し、エラーが発生した場合に停止する関数のように思えます。 レポーター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サーバーで必要なものです)、ヘルパー関数またはそのためのレポーターが適している可能性があります。
レポーターを組み合わせることができます: devtools::test(reporter = c("summary", "stop"))
。
それは私が説明したことをしていないようです-すべてのテストに関する情報がコンソールにあり、いずれかが失敗した場合は適切なゼロ以外の終了コードが必要です。
あなたのニーズによりよく合うかもしれないFailReporterもあります: devtools::test(reporter = c("summary", "fail"))
同じ問題があるように見えますか? テストは最初の失敗で実行を停止します。
ユースケース(かなり一般的であると予想されます)を明確にするために、CIサーバー(Jenkins)で単体テストを実行しています。 Jenkinsは、テストが失敗した場合に適切に失敗するためにゼロ以外の終了コードを必要としますが、最初の失敗だけでなく、すべての失敗を確認したいと思います。
具体的な例としてJenkinsを挙げていますが、この状況は他のCIサーバーなどでも発生すると思います。
上記の私のスクリプトは目標を達成しますが、少しもろいです(たとえば、新しいバージョンのパッケージで結果列の名前が変更された場合、動作を停止します)が、これは組み込みのソリューションを保証するのに十分一般的です。
私はあなたのユースケースを理解していると思います。 私のシステムでは、 reporter = c("summary", "fail")
はアドバタイズされたとおりに機能します。すべてのテストが実行され、最後にstop()が呼び出されます。 何が機能していないかを示すために、reprexを送信していただけますか?
最も参考になるコメント
あなたのニーズによりよく合うかもしれないFailReporterもあります:
devtools::test(reporter = c("summary", "fail"))