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