2016-11-01 10 views
1

Как я могу проверить следующий код?Как проверить многострочный вывод в Elixir?

["one", "two", "three"]) |> Enum.each(&IO.puts(&1)) 
one 
two 
three 
:ok 

Мой тест в настоящее время выглядит следующим образом, но терпит неудачу, потому что IO.puts возвращается :ok скорее, что строки, и, вероятно, не включают в себя символы новых строки в полной строке.

assert ["one", "two", "three"]) |> Enum.each(&IO.puts(&1)) == """ 
one 
two 
three 
""" 

Возможно IO.puts неправильная функция для данного случая использования. Если да, то какую альтернативу я могу использовать?

Заранее спасибо.

ответ

4

Использование capture_io.

fun = fn -> ["one", "two", "three"] |> Enum.each(&IO.puts/1) end 
assert capture_io(fun) == "one\ntwo\nthree\n" 
+0

Спасибо за отличный ответ. Есть ли способ, с помощью которого doctest может обрабатывать ведущие пробелы? "my_string" – FelixFortis

+0

Извините за путаницу, я искал ее, и doctest больше не поддерживает поддержку io. Я отредактировал свой ответ, поскольку часть о доктрине была неправильной. –

 Смежные вопросы

  • Нет связанных вопросов^_^