Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 在Elixir/Erlang中测试递归IO提示符_Recursion_Io_Erlang_Elixir_Ex Unit - Fatal编程技术网

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"

这个答案/例子也可能有帮助-