考虑以下最小的[?]示例:
defmodule Foo do
def bar() do
n = IO.read(:line) |> String.trim() |> String.to_integer()
for _ <- 0..n - 1 do
IO.read(:line) |> IO.write()
end
end
end
import ExUnit.CaptureIO
capture_io("2\nabc\ndef", Foo.bar)
我确实查看了文档,并且对ExUnit.CaptureIO
的使用没有任何限制,但是上面列出的代码挂起,等待输入的第一行,好像没有输入。我错过了什么吗?
如果有关系,我正在使用Elixir 1.7.3。
答案 0 :(得分:1)
capture_io
的第二个参数必须是在启用捕获的情况下运行的函数。在这里,您传递的是运行Foo.bar
的结果。由于希望来自stdio的输入(永远不会到来),这将永远挂起。长话短说,您需要将其作为函数传递:
capture_io("2\nabc\ndef", &Foo.bar/0)
因为Foo.bar
与Foo.bar()
相同。