【问题标题】:cabal test in a sandbox沙盒中的阴谋集团测试
【发布时间】: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


【解决方案1】:

Cabal 在这里确实缺少功能。我的计划是概括 cabal,使其具有较少(或没有)“当前包”的概念。现在很多命令都假设你在一个带有 .cabal 文件的目录中,并且你想对那个包做一些事情。如您所见,对于大型、多包项目而言,这种情况并不常见。

我想要的是让 cabal 获取大多数命令的目标列表,例如 buildtestbench 等。您可以通过以下方式从多个包中运行测试

cabal test --show-details=always \
  pkg-dir1:some-test1 pkg-dir1:some-test2 pkg-dir2

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

我知道现在这对你没有多大帮助,但至少你知道我们正在朝哪个方向前进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多