Test the Elixir code in your markdown!
Add :markdown_test
as a dependency in your mix.exs
file:
# mix.exs
defp deps do
[
{:markdown_test, "0.1.2", only: :test}
]
end
In any test module, use MarkdownTest
to pull in the test_markdown/1
macro and call it for your markdown file:
defmodule MyLibraryTest do
use MarkdownTest
test_markdown("README.md")
end
Then add some Elixir code to test in your markdown file.
The format roughly resembles that of a doctest
.
In order to be picked up, a code block must be between the following markdown comment tags:
<!--- MARKDOWN_TEST_START -->
...code
<!--- MARKDOWN_TEST_END -->
.
iex> 1 + 2
3
The expression and expected values can span multiple lines:
iex> a = %{cool: :beans}
...> b = %{beans: :cool}
...> Map.merge(a, b)
%{
cool: :beans,
beans: :cool
}
You can also include any setup code that needs to be run prior to testing the code:
defmodule MyModule do
def add(x, y), do: x + y
end
iex> MyModule.add(1, 2)
3
markdown_test
will assert that the expression and the expected value match according to Elixir's pattern matching.
Therefore, you can write a test like this:
defmodule MyModule do
def big_result do
{:ok, List.duplicate("hey", 1000)}
end
end
iex> MyModule.big_result()
{:ok, ["hey" | _]}
If you don't add any assertion code, markdown_test
will just verify that the code snippet compiles, like:
%{
this: %{
"should" => :compile
}
}