ExUnit.CaptureIO 仍在等待多个 IO.read 调用的输入
ExUnit.CaptureIO still waits for input on multiple IO.read calls
考虑以下最小 [?] 示例:
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。
capture_io
的第二个参数需要是 运行 的函数,并启用捕获。在这里,您将传递 运行ning Foo.bar
的结果。这永远挂起,因为它期待来自 stdio 的输入,而它永远不会到来。长话短说,您需要将其作为函数传递:
capture_io("2\nabc\ndef", &Foo.bar/0)
因为Foo.bar
与Foo.bar()
相同。
考虑以下最小 [?] 示例:
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。
capture_io
的第二个参数需要是 运行 的函数,并启用捕获。在这里,您将传递 运行ning Foo.bar
的结果。这永远挂起,因为它期待来自 stdio 的输入,而它永远不会到来。长话短说,您需要将其作为函数传递:
capture_io("2\nabc\ndef", &Foo.bar/0)
因为Foo.bar
与Foo.bar()
相同。