1

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

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

此时的一些选择是:

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

这些听起来都不是特别简单和直接。有没有更好的办法?一次只能使用一个格式化程序听起来像是一个相当烦人的限制。

4

1 回答 1

1

最后,我认为这不值得付出努力,但我确实为解决方法做了一个有效的 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是您需要从某个地方获得或自己编写的东西。

于 2018-07-20T07:43:05.133 回答