Elixir Language

Doctests

Introduction

When you document your code with @doc, you can supply code examples like so:

# myproject/lib/my_module.exs

defmodule MyModule do
  @doc """
  Given a number, returns `true` if the number is even, otherwise `false`.

  ## Example
    iex> MyModule.even?(2)
    true
    iex> MyModule.even?(3)
    false
  """
  def even?(number) do
    rem(number, 2) == 0
  end
end

You can add the code examples as test cases into one of your test suites:

# myproject/test/doc_test.exs

defmodule DocTest do
  use ExUnit.Case
  doctest MyModule
end

Then, you can then run your tests with mix test.

Generating HTML documentation based on doctest

Because generating documentation is based on markdown, you have to do 2 things :

1/ Write your doctest and make your doctest examples clear to improve readability (It is better to give a headline, like “examples” or “tests”). When you write your tests, do not forget to give 4 spaces to your tests code so that it will be formatting as code in the HTML documentation.

2/ Then, enter “mix docs” in console at the root of your elixir project to generate the HTML documentation in the doc directory located in the root of your elixir project.
$> mix docs

Multiline doctests

You can do a multiline doctest by using ‘…>’ for the lines following the first

iex> Foo.Bar.somethingConditional("baz")
...>   |> case do
...>       {:ok, _} -> true
...>       {:error, _} -> false
...>      end
true

This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow