如何在Elixir中测试多行输出?

时间:2016-11-01 21:35:17

标签: elixir stdout ex-unit

如何测试以下代码?

["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可能是错误的函数。如果是这样,我可以使用哪种替代方案?

提前致谢。

1 个答案:

答案 0 :(得分:4)

使用capture_io

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