У меня есть функция confirm
, которая считывает ввод IO, и в зависимости от входных данных, если это y
(да) или n
(нет), она возвращает true/false
, в противном случае он снова вызывает confirm
, пока любые ожидаемые y
или n
.Тестирование рекурсивного IO приглашения в 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
Чтобы проверить y
и n
случаев это легко:
assert capture_io([input: "y"], fn -> confirm("Question") end) == "Question"
Но я понятия не имею, как захватить IO несколько раз, чтобы проверить рекурсивный случай, скажем, если на первый вход является «недействительным ", а затем" y ". Есть ли у эликсира какой-либо способ проверить функции ввода-вывода, подобные этому? Или, может быть, у вас есть некоторые предложения, как я могу переписать функцию, чтобы проверить ее проще?
Оригинальный вопрос https://elixirforum.com/t/testing-recursive-io-prompt/3715
Спасибо за помощь.
Этот ответ/пример может помочь - https://stackoverflow.com/a/46630883/1882064 – arcseldon