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

时间:2016-09-03 18:18:42

标签: unit-testing haskell cabal

我尝试关注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我设法看到cabal尝试打开的最后一个文件是dist/test/cabal-test-1804289383846930886.log,该文件不存在。创建文件没有帮助。

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

GHC版本:8.0.1
cabal版本:1.24.0.0

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

1 个答案:

答案 0 :(得分:0)

问题似乎与动态联系有关。 Cabal无法找到测试的.so。在我的情况下,添加$ ls -la /proc/sys/net/ipv4/route/flush --w------- 1 root root 0 Sep 4 15:59 /proc/sys/net/ipv4/route/flush 的链接解决了问题,但文件名可能会更改。

另一种方法是在配置包时使用dist/build/bar-1.0-1l0Xa8pRO0dDWU0quwEdrS-test-bar.test/libHSbar-1.0-1l0Xa8pRO0dDWU0quwEdrS-test-bar.test-ghc8.0.1.so(我在我的cabal配置中隐式使用cabal configure --enable-tests --disable-shared)。或者我可以在调用--enable-shared之前修改一个将LD_LIBRARY_PATH设置为正确值的脚本。

编辑:已经有pull request on github