cabal测试不打印可执行输出

时间:2013-03-27 21:27:55

标签: testing stdout cabal

我有一个cabal包,我使用test-suite类型设置了exitcode-stdio-1.0,如下所示:

当我使用cabal test运行它时,cabal不会打印可执行文件的标准输出/标准错误;它只打印自己的日志信息:

$ 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将此输出打印到自己的标准输出?我在文档中找不到它。

3 个答案:

答案 0 :(得分:13)

这是一种方式:

$ cabal test --log=/dev/stdout

但请注意,这不是一个完整的解决方案,因为Cabal将缓冲整个输出并仅在测试程序退出后显示它。

最近的Cabal版本允许输出流:

$ cabal test --show-details=streaming
  

- 显示明细= 过滤

     

确定单个测试用例的结果是否显示在    终奌站。可能始终(始终显示),从不(从不显示),失败(仅显示失败的结果)或流式传输(实时显示所有结果)。

Cabal User Guide中阅读更多内容。

答案 1 :(得分:4)

有几个月的新方法,测试结果甚至写入文件的stdout,而不是最后刷新

cabal test --show-details=streaming

答案 2 :(得分:0)

当使用exitcode-stdio-1.0时,如果测试程序返回退出代码(显然"失败"),则仅报告测试日志。解决方案是在任何测试失败时让测试程序返回错误代码:

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

在编写&#34;手册&#34;时,您只需要这样做。测试程序:大多数测试报告框架(例如:tastytest-frameworkhspec)已经自动完成。

如果你真的希望总是看到结果,你可以随时使用:

  • cabal test --log=/dev/stdout(在另一个答案中给出)
  • 执行结束时
  • exitFailure