2013-03-27 20 views
10

ich ein Kabale Paket habe, für die ich ein test-suite habe mit dem exitcode-stdio-1.0 Typ eingerichtet, etwa so:Kabale Test druckt nicht ausführbaren Ausgang

Wenn ich es mit cabal test laufen, Kabale druckt nicht die Standardausgabe/Standardfehler der ausführbaren Datei; nur druckt er seine eigenen Logging-Informationen:

$ 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. 
$ 

Die Ausgabe, die ich will in dieser Protokolldatei ist:

$ 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 
$ 

Wie erhalte ich Kabale diesen Ausgang mit einer eigenen Standardausgabe drucken? Ich kann es in der Dokumentation nicht finden.

+0

Vielen Dank für diesen Beitrag.Ich hätte gedacht, dass die Ausrichtung auf die Standardausgabe der häufigste Anwendungsfall wäre. – sdasdadas

Antwort

10

Hier ist eine Art und Weise:

$ cabal test --log=/dev/stdout 

ist jedoch zu beachten, dass dies keine vollständige Lösung, da Cabal den gesamten Ausgabepuffer und zeigt sie nur einmal das Testprogramm verlassen hat.

Aktuelle Cabal Versionen ermöglichen die Ausgabe gestreamt werden:

$ cabal test --show-details=streaming 

--show-details = Filter

Legt fest, ob die Ergebnisse der einzelnen Testfälle werden auf dem Terminal gezeigt . immer (immer an) sein kann, nie (nie zeigen), Ausfälle (zeige nur die Ergebnisse nicht), oder Streaming (alle Ergebnisse in Echtzeit zeigen).

Lesen Sie mehr in der Cabal User Guide.

+0

Gut genug für mich! – jameshfisher

0

Bei Verwendung von exitcode-stdio-1.0 meldet cabal nur das Testprotokoll, wenn das Testprogramm einen Exit-Code zurückgibt (explizit "fehlgeschlagen"). Eine Lösung wäre, um Ihr Testprogramm zurückzukehren einen Fehlercode, wenn einer der Tests fehlschlagen:

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 

nur Sie müssen, dass, wenn ein „manuelles“ Testprogramm zu schreiben: Die meisten Tests Reporting Frameworks (zB: tasty, test-framework , hspec) schon automatisch dazu.

Wenn Sie wirklich wollen immer die Ergebnisse sehen, können Sie immer entweder verwenden:

  • cabal test --log=/dev/stdout (in einer anderen Antwort gegeben)
  • exitFailure am Ende der Ausführung
4

Seit einigen Monaten gibt es einen neuen Weg, und die Testergebnisse werden sogar in die Datei geschrieben, nicht am Ende gelöscht

cabal test --show-details=streaming