`stack test` 不从标准输入读取
`stack test` doesn't read from stdin
我在 OS X 上使用 Stack Version 2.7.3。使用这个简单的代码:
main :: IO ()
main = do
l <- getLine
putStrLn l
这是在默认堆栈项目模板中,只需修改Test.hs
。
构建和 运行 stack test
导致错误消息 <stdin>: hGetLine: end of file
。其他一切(包括输出)工作正常。如果我在 .stack-work
和 运行 中手动找到可执行文件,它 运行 是完美的。
是否有一些标志我必须启用才能让堆栈从标准输入读取? GitHub 和此站点上有一个不相关的问题,但 docker 有问题。我只是在这里使用普通堆栈安装。
当 运行ning 测试时,stdin 似乎立即关闭,因此 运行ning getLine
将抛出异常。但是,我找不到任何文件来证实这一点。
您可以快速将 package.yaml
文件中的测试从 tests:
部分移动到 executables:
部分。然后你可以 运行 它与 stack run <your-test>
。这样您就可以更轻松地调试测试。
使用 cabal 这会更容易,因为您可以 运行 测试套件,就好像它们是具有 cabal run <your-test>
.
的可执行文件一样
我在 OS X 上使用 Stack Version 2.7.3。使用这个简单的代码:
main :: IO ()
main = do
l <- getLine
putStrLn l
这是在默认堆栈项目模板中,只需修改Test.hs
。
构建和 运行 stack test
导致错误消息 <stdin>: hGetLine: end of file
。其他一切(包括输出)工作正常。如果我在 .stack-work
和 运行 中手动找到可执行文件,它 运行 是完美的。
是否有一些标志我必须启用才能让堆栈从标准输入读取? GitHub 和此站点上有一个不相关的问题,但 docker 有问题。我只是在这里使用普通堆栈安装。
当 运行ning 测试时,stdin 似乎立即关闭,因此 运行ning getLine
将抛出异常。但是,我找不到任何文件来证实这一点。
您可以快速将 package.yaml
文件中的测试从 tests:
部分移动到 executables:
部分。然后你可以 运行 它与 stack run <your-test>
。这样您就可以更轻松地调试测试。
使用 cabal 这会更容易,因为您可以 运行 测试套件,就好像它们是具有 cabal run <your-test>
.