Есть ли способ проверить вывод ввода-вывода с помощью Doctest в Elixir?

Я полностью согласен с написанием «нормального» теста, фиксирующего IO для этого.

Просто хотел бы знать, можно ли использовать Doctest.

Примером может быть:

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

person Ricardo Valeriano    schedule 11.10.2017    source источник


Ответы (1)


Вы можете использовать ту же функцию, что и в обычном тесте: ExUnit.CaptureIO.capture_io. Однако эта функция может не подходить для doctest, если вы добавите больше функциональности в функцию.

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
person Dogbert    schedule 12.10.2017
comment
Ага, понял. Да, для этой конкретной вещи, я думаю, лучше просто пройти настоящий тест. Но это многое проясняет. Спасибо, @Dogbert. знак равно - person Ricardo Valeriano; 12.10.2017