我在本地和CI中都运行HSpec测试。默认的specdoc
格式化程序会产生漂亮的彩色stdio输出。但是,对于CI,我需要XML格式的结果,以便可以将其显示在Web上。
我将XML格式添加到HSpec配置中,但是这完全禁用了stdio输出。我曾尝试破解格式化程序,以便它同时运行两个格式化命令,但这只会导致XML文件中混有文本和XML消息(因为只有一个configOutputFile
选项)。
这时有一些选择:
silent
格式化程序运行测试,然后以某种方式尝试对结果运行填充程序。这两个听起来都不是特别容易和直接的。有没有更好的办法?一次只能使用一个Formatter听起来很烦人。
答案 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
是您需要从某个地方得到的东西或写自己的东西。