Ich habe eine Funktion confirm
, die IO-Eingang liest, und in Abhängigkeit von Eingabe, wenn es y
(ja) oder n
(nein), kehrt sie true/false
, sonst nennt es confirm
wieder, bis Alle erwarteten y
oder n
wird eingegeben.Testing rekursive IO prompt in Elixir/Erlang
@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
Um zu testen, y
und n
Fällen ist es einfach:
assert capture_io([input: "y"], fn -> confirm("Question") end) == "Question"
Aber ich habe keine Ahnung, wie IO mehrfach erfassen rekursiven Fall zu testen, lassen Sie uns sagen, wenn auf den ersten Eingang „ungültig "Und dann" y ". Hat elixir eine Möglichkeit, IO-Funktionen so zu testen? Oder haben Sie vielleicht ein paar Vorschläge, wie ich die Funktion umschreiben könnte, um sie einfacher zu testen?
Original Frage https://elixirforum.com/t/testing-recursive-io-prompt/3715
Danke für die Hilfe.
Diese Antwort/Beispiel kann auch helfen - https://stackoverflow.com/a/46630883/1882064 – arcseldon