2017-10-11 12 views
1

Je suis totalement d'accord pour écrire un test "normal" capturant le IO pour cela.Existe-t-il un moyen de tester une sortie d'E/S en utilisant Doctest dans Elixir?

J'aimerais simplement savoir s'il est possible d'utiliser Doctest pour cela.

Un exemple serait:

defmodule CLI do 

    @doc """ 
    Politely says Hello. 

    ## Examples 

     iex> CLI.main([]) 
     "Hello dear person." # this would be the expected IO output 
    """ 
    def main(args) do 
    IO.puts "Hello dear person." 
    end 
end 

defmodule CLITest do 
    use ExUnit.Case 
    doctest CLI 
end 

Répondre

3

Vous pouvez utiliser la même fonction que vous souhaitez utiliser dans un test normal: ExUnit.CaptureIO.capture_io. Cela peut ne pas être une fonction adaptée aux doctests si vous ajoutez plus de fonctionnalités à la fonction.

defmodule CLI do 
    @doc """ 
    Politely says Hello. 

    ## Examples 

     iex> import ExUnit.CaptureIO 
     iex> capture_io(fn -> CLI.main([]) end) 
     "Hello dear person.\\n" 
    """ 
    def main(args) do 
    IO.puts "Hello dear person." 
    end 
end 
$ mix test 
. 

Finished in 0.03 seconds 
1 test, 0 failures 
+0

Oui, compris. Oui, pour cette chose spécifique, je pense qu'il vaut mieux simplement aller pour le test "réel". Mais cela clarifie un tas. Merci @Dogbert. =). –