Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Testing cabal测试不打印可执行输出_Testing_Stdout_Cabal - Fatal编程技术网

Testing cabal测试不打印可执行输出

Testing cabal测试不打印可执行输出,testing,stdout,cabal,Testing,Stdout,Cabal,我有一个阴谋集团包,我使用exitcode-stdio-1.0类型为其设置了一个测试套件,如下所示: 当我使用cabaltest运行它时,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

我有一个阴谋集团包,我使用
exitcode-stdio-1.0
类型为其设置了一个
测试套件,如下所示:

当我使用
cabaltest
运行它时,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将此输出打印到自己的标准输出?我在文档中找不到它。

这里有一种方法:

$ cabal test --log=/dev/stdout
但是请注意,这不是一个完整的解决方案,因为Cabal将缓冲整个输出,并且仅在测试程序退出后显示它

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

$ cabal test --show-details=streaming
或者,如果您正在使用Cabal new test:

$ cabal new-test --test-show-details=streaming
--显示详细信息=过滤器

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


使用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
导入系统。退出(exitFailure,exitSuccess)
main::IO()
main=do

结果几个月来出现了一种新的方法,测试结果甚至被写入到文件的标准输出中,而不是在最后刷新

cabal test --show-details=streaming

谢谢你的这篇文章。我原以为直接使用标准输出是最常见的用例。对于新构建: