我有一个函数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("Question") end) == "Question"
但是我不知道如何多次捕获 IO 来测试递归情况,假设第一次输入是“无效”然后是“y”。elixir 有没有办法测试这样的 IO 功能?或者你有什么建议我可以重写函数来更容易地测试它吗?
原始问题https://elixirforum.com/t/testing-recursive-io-prompt/3715
谢谢您的帮助。