2016-11-01 11 views
1

次のコードをテストするにはどうすればよいですか?エリクシルで複数行出力をテストするにはどうすればよいですか?

["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についての部分が間違っていたので、私の答えを編集しました。 –

関連する問題