沙盒中的cabal测试

Ash*_*ley 6 haskell cabal cabal-install

假设我有三个自己的包,AB&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
Run Code Online (Sandbox Code Playgroud)

我想构建所有包,在我的包上运行所有测试套件,但不运行依赖包,显示完整的测试输出.最好的方法是什么?

选项1

cd /path/to/sandbox
cabal install --enable-tests A B C
Run Code Online (Sandbox Code Playgroud)

问题:

  • 没有办法传递--show-details=alwayscabal 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
Run Code Online (Sandbox Code Playgroud)

问题:

  • 这会导致A和B库被不必要地重建.

选项3

在沙箱中cabal.config,添加该行tests: True.

问题:

  • 这将导致测试从Hackage运行所有依赖包,这在某些情况下非常慢并且失败.

tib*_*bbe 8

Cabal在这里真的缺少功能.我的计划是推广cabal,因此它对"当前包"的概念较少(或没有).现在很多命令都假设您在一个带有.cabal文件的目录中,并且您希望对该包执行操作.如您所见,对于大型多包装项目来说,这种情况并不常见.

我想是的阴谋采取对大多数命令,例如目标清单build,test,bench等,您可以从几个包通过运行测试

cabal test --show-details=always \
  pkg-dir1:some-test1 pkg-dir1:some-test2 pkg-dir2
Run Code Online (Sandbox Code Playgroud)

(上面的例子表明,应该可以只指定包的某些部分.)

我意识到这对你现在没什么帮助,但至少你知道我们正朝着哪个方向前进.