Mixujeme Elixir
Součástí instalace programovacího jazyka Elixir je i nástroj Mix - švýcarský nožík každého alchymisty. Lze ho použít ke všem základním úkonům potřebným během vývoje aplikací, dokonce je možné si do něj nové operace přidávat. Seznam všech dostupných příkazů získáte pomocí jednoduchého mix help
, nápovědu ke konkrétní operaci pak pomocí mix help příkaz
.
Založení a struktura projektu
Jedna z nejzákladnějších operací je založení nového projektu: mix new moje_knihovna
.
Příkaz vytvoří nový adresář moje_knihovna
a v něm několik souborů a podadresářů:
$ cd moje_knihovna && tree -a
.
├── .formatter.exs
├── .gitignore
├── lib
│ └── moje_knihovna.ex
├── mix.exs
├── README.md
└── test
├── moje_knihovna_test.exs
└── test_helper.exs
Pojďme si jednotlivé soubory stručně představit. Soubor README.md
by měl obsahovat
popis projektu v markdownu. Pokud budete
pro správu verzí používat
git, určitě potěší i předgenerovaný .gitignore
-
schová před gitem vše, co obvykle během vývoje elixirové nástroje vygenerují a
co by se nemělo do gitového repozitáře dostat.
Soubor .formatter.exs
pak obsahuje konfiguraci formátovače zdrojových souborů
(lze spustit pomocí mix format
).
Velice důležitý je soubor mix.exs
, ve kterém je konfigurace projektu.
Projekt se konfiguruje přímo v Elixiru
(jedná se o skript,
jak napovídá přípona .exs
).
Mimo jiné obsahuje i funkci deps
, kde se definují závislosti, tedy knihovny,
které váš projekt potřebuje ke své činnosti.
Zbývají dva adresáře: lib
- ten obsahuje zdrojáky vašeho projektu a test
-
ten samozřejmě obsahuje testy.
Spouštění testů
Projekt máme připravený, je správný čas ho otestovat:
$ mix test
Compiling 1 file (.ex)
Generated moje_knihovna app
..
Finished in 0.02 seconds
1 doctest, 1 test, 0 failures
Testy dopadly dobře! Při pohledu do souboru test/moje_knihovna_test.exs
vás může zarazit, že proběhly dva testy (1 doctest, 1 test),
ačkoliv soubor obsahuje pouze jeden test:
defmodule MojeKnihovnaTest do
use ExUnit.Case
doctest MojeKnihovna
test "greets the world" do
assert MojeKnihovna.hello() == :world
end
end
Klíčem k záhadě je doctest MojeKnihovna
na řádku 3 - spuštění
testů dokumentace.
V Elixiru lze totiž testovat i dokumentaci a tudíž mít jistotu,
že příklady v ní uvedené jsou stále funkční:
defmodule MojeKnihovna do
@doc """
Hello world.
## Examples
iex> MojeKnihovna.hello()
:world
"""
def hello do
:world
end
end