【发布时间】:2014-08-14 05:48:32
【问题描述】:
假设我有三个自己的包,A B 和 C,它们依赖于 Hackage 中的许多附加包。我正在使用 cabal 1.18。
- C 取决于 A 和 B。
- B 依赖于 A。
- A 和 B 有测试套件。
我这样设置沙盒:
cd /path/to/sandbox
cabal sandbox init
cabal sandbox add-source /path/to/A
cabal sandbox add-source /path/to/B
cabal sandbox add-source /path/to/C
我想构建所有包,在我的包上运行所有测试套件,而不是依赖包,显示完整的测试输出。最好的方法是什么?
选项 1
cd /path/to/sandbox
cabal install --enable-tests A B C
问题:
- 无法将
--show-details=always传递给cabal install。 - 测试输出隐藏在日志文件中,不显示。
- 如果用户之前碰巧做了
cabal install A,A 将不会重建,测试也不会运行。
选项 2
cd /path/to/A
cabal sandbox init --sandbox=/path/to/sandbox/.cabal-sandbox
cd /path/to/B
cabal sandbox init --sandbox=/path/to/sandbox/.cabal-sandbox
cd /path/to/A
cabal configure --enable-tests
cabal test --show-details=always
cd /path/to/B
cabal configure --enable-tests
cabal test --show-details=always
cabal install C
问题:
- 这会导致不必要地重建 A 和 B 库。
选项 3
在沙箱cabal.config中,添加tests: True这一行。
问题:
- 这将导致对来自 Hackage 的所有依赖包运行测试,这非常慢并且在某些情况下会失败。
【问题讨论】:
-
您今天最好的选择是为每个包创建一个沙箱,将每个包的 deps 添加到其自己的沙箱中,然后 cd 进入每个沙箱并使用
cabal test运行测试。 -
这有点尴尬,因为我们实际上将沙盒用作“构建风格”,并打开/关闭优化和其他标志等。
标签: haskell cabal cabal-install