2016-11-01 2 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를 지원하지 않습니다. 나는 doctest에 관한 부분이 틀렸기 때문에 나의 대답을 편집했다. –

관련 문제