2013-03-27 15 views
10

を印刷しません。実行可能ファイルの標準エラー。それだけで、独自のログ情報を出力します。徒党テストはそうのように、私は私が<code>exitcode-stdio-1.0</code>タイプを使用して<code>test-suite</code>を設定している秘密結社のパッケージを持って実行可能な出力

$ cabal test 

Running 1 test suites... 
Test suite test-foo: RUNNING... 
Test suite test-foo: PASS 
Test suite logged to: dist/test/foo-0.0.1-test-foo.log 
1 of 1 test suites (1 of 1 test cases) passed. 
$ 

私が欲しいの出力は、そのログファイルにある:私は、自身の標準出力にこの出力を印刷するために徒党を取得するにはどうすればよい

$ cat dist/test/foo-0.0.1-test-fo.log 
Test suite test-foo: RUNNING... 
HUnit group 1: 
    Expected connect: [OK] 

     Test Cases Total  
Passed 1   1   
Failed 0   0   
Total 1   1   
Test suite test-foo: PASS 
Test suite logged to: dist/test/foo-0.0.1-test-foo.log 
$ 

私はドキュメントでそれを見つけることができません。

$ cabal test --log=/dev/stdout 

注しかし、陰謀団は、全体の出力をバッファリングし、テストプログラムが終了した後にのみ、それが表示されますので、これは、完全な解決策ではないこと:

+0

ありがとうございます。私は、標準出力に向けるのが最も一般的なユースケースだと思ったでしょう。 – sdasdadas

答えて

10

ここに1つの方法です。

最近派閥バージョンは、出力がストリーミングされることを可能にする:

$ cabal test --show-details=streaming 

--show-詳細=個々のテストケースの結果を 端末に表示されている場合フィルタ

を決定し。 (リアルタイムですべての結果を表示)をストリーミング常に(常に表示さ)、決して(表示しない)、障害(ショーは結果のみを失敗した)、またはかもしれません。

続きを読むCabal User Guide

+0

私にとっては十分です! – jameshfisher

0

exitcode-stdio-1.0を使用すると、テストプログラムが終了コードを返した場合(明らかに「失敗」)、cabalはテストログのみを報告します。解決策は、あなたのテストプログラムは、テストのいずれかが失敗したときにエラーコードを返す作るために次のようになります。

import System.Exit (exitFailure, exitSuccess) 

main :: IO() 
main = do 
    result <- runTests 
    if result 
    then exitSuccess 
    else exitFailure 

runTests :: IO Bool 
runTests = do 
    ... 
    return True/False 

はあなたが唯一必要とする「手動」テストプログラムの書き込み時:ほとんどのテスト報告の枠組み(例:tastytest-frameworkを、hspec)はすでに自動的にそれを行います。

あなたが本当ににしたい場合は、常に結果を参照してください、あなたは常に使用することができ、次のいずれかの実行の最後に

  • exitFailure(別の答えに与えられた)

    • cabal test --log=/dev/stdout
  • 4

    数ヶ月間新しい方法があり、テスト結果はファイルのstdoutに書き込まれ、最後にはフラッシュされません。

    cabal test --show-details=streaming 
    
    関連する問題