使用 cabal 的详细 0.9 测试时出现“Prelude.read: no parse”错误

Posted

技术标签:

【中文标题】使用 cabal 的详细 0.9 测试时出现“Prelude.read: no parse”错误【英文标题】:Getting "Prelude.read: no parse" error when using detailed-0.9 tests with cabal 【发布时间】:2016-09-03 18:18:41 【问题描述】:

我尝试关注this guide,以便使用detailed-0.9 测试类型为Haskell 包编写一些测试。 cabal 文件是

Name:           bar
Version:        1.0
License:        BSD3
Cabal-Version:  >= 1.10
Build-Type:     Simple

Library
    exposed-modules:     Foo
    build-depends:       base >=4.9 && <4.10
    default-language:    Haskell2010

Test-Suite test-bar
    type:       detailed-0.9
    test-module: Bar
    build-depends: base, Cabal >= 1.9.2
    default-language:    Haskell2010

Bar.hs 是

module Bar ( tests ) where

import Distribution.TestSuite

tests :: IO [Test]
tests = return [ Test succeeds, Test fails ]
  where
    succeeds = TestInstance
         run = return $ Finished Pass
        , name = "succeeds"
        , tags = []
        , options = []
        , setOption = \_ _ -> Right succeeds
        
    fails = TestInstance
         run = return $ Finished $ Fail "Always fails!"
        , name = "fails"
        , tags = []
        , options = []
        , setOption = \_ _ -> Right fails
        

但是,当我运行测试时

cabal configure --enable-tests
cabal build
cabal test

我明白了

Preprocessing test suite 'test-bar' for bar-1.0...
[1 of 1] Compiling Main             ( dist/build/test-barStub/test-barStub-tmp/test-barStub.hs, dist/build/test-barStub/test-barStub-tmp/Main.dyn_o )
Linking dist/build/test-barStub/test-barStub ...
Running 1 test suites...
Test suite test-bar: RUNNING...
Prelude.read: no parse

this repository 的代码也会出现这种情况。

使用strace cabal test 我设法看到阴谋集团试图打开的最后一个文件是dist/test/cabal-test-1804289383846930886.log,它不存在。创建文件没有帮助。

detailed-0.9 测试类型仍然是实验性的吗?我应该改用exitcode-stdio-1.0 吗?

GHC 版本:8.0.1 阴谋集团版本:1.24.0.0

编辑: 即使我在Bar.hs 中设置tests = return [],错误仍然存​​在。

【问题讨论】:

您的代码(加上一个存根 Foo.hs)对我有用。我已经看到测试程序崩溃时会发生该错误。 我也无法重现。 这对我来说很好,使用相同的 ghc 和 cabal。您在构建之前尝试过cabal clean 吗? @Michael 是的,我尝试运行cabal clean,但没有任何区别。是否有任何配置可能会干扰这一点?或者任何包裹? 【参考方案1】:

问题似乎与动态链接有关。 Cabal 找不到测试的 .so。就我而言,添加指向dist/build/bar-1.0-1l0Xa8pRO0dDWU0quwEdrS-test-bar.test/libHSbar-1.0-1l0Xa8pRO0dDWU0quwEdrS-test-bar.test-ghc8.0.1.so 的链接解决了问题,但文件名可能会更改。

另一种方法是在配置包时使用cabal configure --enable-tests --disable-shared(我在我的阴谋集团配置中隐式使用--enable-shared)。或者我可以在调用cabal test 之前破解一个将LD_LIBRARY_PATH 设置为正确值的脚本。

编辑:已经有一个pull request on github。

【讨论】:

以上是关于使用 cabal 的详细 0.9 测试时出现“Prelude.read: no parse”错误的主要内容,如果未能解决你的问题,请参考以下文章

导入任何.img- Amlogic USB刻录工具,v2.0.8,v2.0.9,v2.1.2时出现致命错误Windows 10

如何使用 cabal 在 ghcid 中运行测试套件?

在 Cabal 测试套件中找到我的可执行文件

尝试在单台 Mac 机器上使用并行 Jenkins 管道构建 iOS 应用程序时出现缓存问题

尝试加入提取日期和月份时出现 SQL 错误

检索数据时出现 Vue/Firestore/Firebase 错误