使用 Haskell Stack 运行详细的 0.9 测试套件时“无法在本地找到模块”
Posted
技术标签:
【中文标题】使用 Haskell Stack 运行详细的 0.9 测试套件时“无法在本地找到模块”【英文标题】:"module cannot be found locally" when running detailed-0.9 test suite with Haskell Stack 【发布时间】:2019-02-22 12:48:39 【问题描述】:我有一个使用 detailed-0.9
的带有测试套件的 Haskell 项目。我可以使用cabal
正确运行测试,但使用stack
我会出错。 exitcode-stdio-1.0
测试套件似乎运行良好。
MWE
下面是一个最小的工作示例,包含两种测试套件类型。完整的存储库可用here。
stack-test-detailed.cabal
name: stack-test-detailed
version: 0.1.0.0
build-type: Simple
cabal-version: >=1.20
test-suite exitcode
type: exitcode-stdio-1.0
main-is: Exitcode.hs
other-modules: MyModule
build-depends: base >=4.10
hs-source-dirs: src testsuite
default-language: Haskell2010
test-suite detailed
type: detailed-0.9
test-module: Detailed
other-modules: MyModule
build-depends: base >=4.10, Cabal >=1.20
hs-source-dirs: src testsuite
default-language: Haskell2010
src/MyModule.hs
module MyModule where
myFunction :: Int
myFunction = 1
testsuite/Exitcode.hs
import MyModule (myFunction)
import System.Exit (exitSuccess, exitFailure)
main :: IO ()
main =
if myFunction == 1
then exitSuccess
else exitFailure
testsuite/Detailed.hs
module Detailed where
import MyModule (myFunction)
import Distribution.TestSuite
tests :: IO [Test]
tests = return
[ Test $ TestInstance
run = return $ Finished $ if myFunction == 1 then Pass else Fail "not equal 1"
, name = "my test"
, Distribution.TestSuite.tags = []
, options = []
, setOption = \opt val -> Left "options not supported"
]
stack.yaml
resolver: lts-11.22
输出
阴谋
一切正常:
$ cabal test exitcode
Preprocessing test suite 'exitcode' for stack-test-detailed-0.1.0.0..
Building test suite 'exitcode' for stack-test-detailed-0.1.0.0..
Running 1 test suites...
Test suite exitcode: RUNNING...
Test suite exitcode: PASS
Test suite logged to: dist/test/stack-test-detailed-0.1.0.0-exitcode.log
1 of 1 test suites (1 of 1 test cases) passed.
$ cabal test detailed
Preprocessing test suite 'detailed' for stack-test-detailed-0.1.0.0..
Building test suite 'detailed' for stack-test-detailed-0.1.0.0..
[1 of 1] Compiling Main ( dist/build/detailedStub/detailedStub-tmp/detailedStub.hs, dist/build/detailedStub/detailedStub-tmp/Main.o )
Linking dist/build/detailedStub/detailedStub ...
Running 1 test suites...
Test suite detailed: RUNNING...
Test suite detailed: PASS
Test suite logged to: dist/test/stack-test-detailed-0.1.0.0-detailed.log
1 of 1 test suites (1 of 1 test cases) passed.
堆栈
退出代码测试工作:
$ stack test :exitcode
stack-test-detailed-0.1.0.0: build (test)
Preprocessing test suite 'exitcode' for stack-test-detailed-0.1.0.0..
Building test suite 'exitcode' for stack-test-detailed-0.1.0.0..
stack-test-detailed-0.1.0.0: test (suite: exitcode)
stack-test-detailed-0.1.0.0: Test suite exitcode passed
Completed 2 action(s).
详细测试编译失败:
$ stack test :detailed
stack-test-detailed-0.1.0.0: build (test)
Preprocessing test suite 'detailed' for stack-test-detailed-0.1.0.0..
Building test suite 'detailed' for stack-test-detailed-0.1.0.0..
<no location info>: error:
module ‘MyModule’ cannot be found locally
Progress 1/2
-- While building custom Setup.hs for package stack-test-detailed-0.1.0.0 using:
/Users/john/.stack/setup-exe-cache/x86_64-osx/Cabal-simple_mPHDZzAJ_2.0.1.0_ghc-8.2.2 --builddir=.stack-work/dist/x86_64-osx/Cabal-2.0.1.0 build test:detailed --ghc-options " -ddump-hi -ddump-to-file -fdiagnostics-color=always"
Process exited with code: ExitFailure 1
环顾四周,我发现detailed-0.9
有点不酷,人们似乎立即放弃了它。但它是properly documented 并且确实适用于cabal
,所以我不明白为什么stack
会失败。
【问题讨论】:
听起来你应该把它归档为stack bug。 您可以移动“更新”作为答案,以使该线程标记为已解决 【参考方案1】:更新
看来这实际上是 Stack 的一个 bug,已经报告了 here 并固定 here(尽管最新版本中还没有修复)。
【讨论】:
以上是关于使用 Haskell Stack 运行详细的 0.9 测试套件时“无法在本地找到模块”的主要内容,如果未能解决你的问题,请参考以下文章
奇怪的 Haskell 'stack' 错误:“无法加载 .so/.DLL”“不是可写段”