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



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

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

目前的几个选项是:

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

这两个听起来都不是特别简单明了。有更好的方法吗?一次只能使用一个格式化程序听起来是一个相当烦人的限制。

最后,我决定不值得付出这些努力,但我确实制定了一个可行的解决方案:

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是你需要从某个地方得到的东西,或者你自己写。

相关内容

  • 没有找到相关文章

最新更新