【问题标题】:ExUnit.CaptureIO still waits for input on multiple IO.read callsExUnit.CaptureIO 仍然等待多个 IO.read 调用的输入
【发布时间】:2018-11-01 07:48:38
【问题描述】:

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

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。

【问题讨论】:

    标签: input elixir ex-unit


    【解决方案1】:

    capture_io 的第二个参数需要是一个函数,才能在启用捕获的情况下运行。在这里,您传递了运行Foo.bar 的结果。这会永远挂起,因为它期待来自 stdio 的输入,而这个输入永远不会到来。长话短说,您需要将其作为函数传递:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 2019-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多