Recursion 在Elixir/Erlang中测试递归IO提示符
我有一个函数Recursion 在Elixir/Erlang中测试递归IO提示符,recursion,io,erlang,elixir,ex-unit,Recursion,Io,Erlang,Elixir,Ex Unit,我有一个函数confirm,它读取IO输入,根据输入,如果是y(yes)或n(no),它将返回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
confirm
,它读取IO输入,根据输入,如果是y
(yes)或n
(no),它将返回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功能?或者你们有什么建议可以让我重写函数,让它更容易测试吗
原始问题
谢谢您的帮助。未经测试,但是只使用换行符怎么样
assert capture_io([input: "foo\nbar\ny"], fn -> confirm("Question") end) == "Question"
这个答案/例子也可能有帮助-