Haskell stack无法构建测试可执行文件。

7

背景

我正在用Haskell构建一个日志文件解析器。我使用stack来构建它。运行stack build命令可以顺利工作,我的项目编译成功。然而,运行stack test会产生以下错误:

parser-test: executable not found

我看到在错误信息上方有以下警告,但我不知道如何避免它所指的重定向。

Warning: output was redirected with -o, but no output will be generated because there is no Main module.

相关文件

目前我还没有编写任何测试,因此测试文件是由stack new创建的。我的cabal文件长这样:

...
category:            Executable
build-type:          Simple
-- extra-source-files:
cabal-version:       >=1.10

library
hs-source-dirs:      src
exposed-modules:     LogParser
build-depends:       base >= 4.7 && < 5
                    , attoparsec
                    , bytestring
                    , old-locale
                    , time
default-language:    Haskell2010

executable parser-exe
hs-source-dirs:      app
main-is:             Main.hs
ghc-options:         -threaded -rtsopts -with-rtsopts=-N
build-depends:       base
                    , attoparsec
                    , bytestring
                    , old-locale
                    , time
                    , parser
default-language:    Haskell2010

test-suite parser-test
type:                exitcode-stdio-1.0
hs-source-dirs:      test
main-is:             Spec.hs
build-depends:       base
                    , attoparsec
                    , bytestring
                    , hspec
                    , hspec-attoparsec
                    , old-locale
                    , time
                    , parser
ghc-options:         -threaded -rtsopts -with-rtsopts=-N
default-language:    Haskell2010

source-repository head
type:     git
...

我觉得我错过了什么,但是我找不到我缺失的内容在哪里有记录。

期望的行为

我应该能看到Stack文档中概述的测试套件尚未实现消息。


似乎我可以通过将测试模块重命名为“Main”来解决这个问题,尽管我已经有一个“Main”模块。对我来说似乎有点违反直觉,所以我要提出一个问题,看看是否有人同意。 - Garry Cairns
我怀疑他们会不会同意。main-is 的含义在文档中非常清晰明了 - Daniel Wagner
1个回答

4

模板中test/Spec.hs文件的内容如下:

main :: IO ()
main = putStrLn "Test suite not yet implemented"

您可以在commercialhaskell/stack-templatesnew-template.hsfiles中查看该内容。
关于module ParserSpec where行的来源我不确定(正如在Github问题中提到的),但它并不是模板的一部分。在我的系统上,stack new bar && cd bar && stack test执行成功。
至于Main模块要求的原因:它来自Cabal库,据我所知,由于Cabal支持的其他编译器的限制而被添加。换句话说,GHC理论上可以允许此代码编译,但Cabal不会传递这些参数以保持与其他编译器的兼容性。

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Garry Cairns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接