`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>.

的可执行文件一样