我有一个名为confirm
的函数,它读取IO输入,并根据输入,如果是y
(是)或n
(否),则返回true/false
,否则会再次调用confirm
,直到输入了任何预期的y
或n
。
@spec confirm(binary) :: boolean
def confirm(question) do
answer = question |> IO.gets() |> String.trim() |> String.downcase()
case(answer) do
"y" -> true
"n" -> false
_ -> confirm(question)
end
end
要测试 y
和 n
的情况非常容易:
assert capture_io([input: "y"], fn -> confirm("问题") end) == "问题"
但我不知道如何多次捕获 IO 来测试递归的情况,比如说如果第一次输入是 “无效”,然后是 “y”。Elixir 有没有办法像这样测试 IO 函数?或者你是否有一些建议来重写函数以便更轻松地进行测试?
原问题https://elixirforum.com/t/testing-recursive-io-prompt/3715
感谢您的帮助。