首页 > 解决方案 > 获取 Stack 以通过测试套件名称作为 --test-arguments 的一部分

问题描述

使用 cabal 可以建立一个连续构建,以许多 CI 系统将接受的格式记录测试成功/失败,例如:

cabal test '--test-option=--jxml=test-results/$test-suite.xml'

这里重要的部分$test-suite是替换为测试的名称,以便不同的测试将其结果放入不同的文件中。

当我使用堆栈时,所有测试都会得到--jxml=test-results/$test-suite.xml传递给它们的选项,因此最终结果是测试会覆盖彼此的结果。

有什么方法可以运行我的所有测试,stack以便我可以告诉每个测试套件一个不同的地方来写他们的结果?

我什至会接受一些堆栈命令来为我解析 cabal 文件并告诉我有哪些测试套件,因为这样我就可以在 bash 中编写一个循环,一次调用每个测试。

标签: haskellhaskell-stack

解决方案


我什至会接受一些堆栈命令来为我解析 cabal 文件并告诉我有哪些测试套件,因为这样我就可以在 bash 中编写一个循环,一次调用每个测试。

如果您愿意为此屈服,stack ide targets将返回一个目标列表,您可以从中进行一些抨击以获取测试套件列表。像这样的东西:

stack ide targets 2>&1 |
  while IFS=: read pkg type suite; do
    [[ $type = test ]] && stack test ":$suite" --test-arguments="--jxml=test-results/$suite.xml"
  done

推荐阅读