如何通过两个格式化程序同时记录HSpec测试输出?

时间:2018-07-19 09:55:49

标签: haskell continuous-integration automated-tests hspec

我在本地和CI中都运行HSpec测试。默认的specdoc格式化程序会产生漂亮的彩色stdio输出。但是,对于CI,我需要XML格式的结果,以便可以将其显示在Web上。

我将XML格式添加到HSpec配置中,但是这完全禁用了stdio输出。我曾尝试破解格式化程序,以便它同时运行两个格式化命令,但这只会导致XML文件中混有文本和XML消息(因为只有一个configOutputFile选项)。

这时有一些选择:

  • 要运行两次测试,每个格式化程序都要运行一次
  • 要使用silent格式化程序运行测试,然后以某种方式尝试对结果运行填充程序。
  • 破解我的格式化程序输出,例如一些命令直接进入stdio。

这两个听起来都不是特别容易和直接的。有没有更好的办法?一次只能使用一个Formatter听起来很烦人。

1 个答案:

答案 0 :(得分:0)

最后,我认为这样做不值得,但我确实对解决方法进行了有效的PoC:

hspecCi :: String -> Spec -> IO ()
hspecCi filename spec = do
    isCiBuild <- (== "true") <$> getEnv "CI" `catch` \(e :: SomeException) -> return ""

    let ciConfig = defaultConfig
                 { configFormatter = Just xmlFormatter
                 , configOutputFile = Right $ testResultsPath ++ filename ++ "/results.xml"
                 }

    hspecWith (if isCiBuild then ciConfig else defaultConfig) spec

这将在本地版本中运行stdio输出,并在CI中运行XML。不太难写,但也许会对某人有所帮助。 xmlFormatter是您需要从某个地方得到的东西或写自己的东西。