我有一些仅属于我的测试程序的数据文件,并且与主库一起分发会令人困惑。
不幸的是,.cabal data-files
field仅适用于整个 cabal 文件,而不是像 test-suite
这样的单个部分.如果我尝试在测试套件节中使用它,我会得到:
Warning: ssh.cabal: Unknown fields: data-files (line 71)
有没有一种自然的方法可以将这些文件与我的测试程序相关联,以便它们仅在
--enable-tests
时被复制?指定?如果没有更好的方法,我可能会使用 Template Haskell 将它们嵌入到可执行文件中,然后在运行时再次将它们写出来或类似的东西,但感觉很丑陋。
最佳答案
没有 Cabal 属性允许您将数据文件与测试套件(或构建的任何非全局节)相关联。
此问题的常见解决方案是在 extra-source-files
中声明这些文件。属性。该属性也是全局的,它确保列出的文件包含在发布 tarball 中,以便测试套件在运行时可以找到它们。不像 data-files
,但是,extra-source-files
没有安装——这可能是你想要的,因为你的测试套件也没有安装。因此这些文件在构建(和测试套件运行)期间可用,但它们不会占用安装空间。
构建驱动程序,如 cabal-install
和 stack
将执行测试套件,当前工作目录指向项目的顶级目录,即包含项目的 Cabal 文件的目录。因此,如果您有一个位于 test/my-data-file.txt
的数据文件,那么您的测试套件可以使用该路径访问该文件。
关于haskell - 仅在 cabal 测试套件中包含数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29361413/