ExUnit.CaptureIO仍在等待多个IO.read调用上的输入

时间:2018-10-31 20:14:57

标签: input elixir ex-unit

考虑以下最小的[?]示例:

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。

1 个答案:

答案 0 :(得分:1)

capture_io的第二个参数必须是在启用捕获的情况下运行的函数。在这里,您传递的是运行Foo.bar的结果。由于希望来自stdio的输入(永远不会到来),这将永远挂起。长话短说,您需要将其作为函数传递:

capture_io("2\nabc\ndef", &Foo.bar/0)

因为Foo.barFoo.bar()相同。