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.barFoo.bar()相同。