假设我有三个自己的包,A、B和C,它们都依赖于Hackage上的许多其他包。我正在使用cabal 1.18。
- C依赖于A和B。 - B依赖于A。 - A和B都有测试套件。
我像这样设置了沙盒:
- 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 上所有依赖包的测试,非常缓慢并且在某些情况下会失败。
cabal test
运行测试。 - tibbe