2015-10-24 14 views
6

Mam metodę w mojej aplikacji do eliksiru, powiedzmy Some.Module.func/1, która zwraca krotkę dwóch liczb. Piszę testy w ExUnit i muszę tylko przetestować pierwszy element w krotce i nie przejmuję się tym drugim.Użyj podkreślenia (_) w testach ExUnit

Dotychczas Próbowałem w ten sposób:

test "some method" do 
    assert Some.Module.func(45) == {54, _} 
end 

Ale właśnie ten błąd podczas uruchamiania Test:

Compiled lib/some.ex 
Generated some app 
** (CompileError) test/some_test.exs:7: unbound variable _ 
    (stdlib) lists.erl:1353: :lists.mapfoldl/3 
    (stdlib) lists.erl:1354: :lists.mapfoldl/3 

Dlaczego nie jest to pracy, i jak mogę ignorować niepotrzebne wyniki w moich testach?

Odpowiedz

8

Nie można dopasować tak z assert podczas korzystania z ==. Można wykonać następujące czynności z =:

test "some method" do 
    assert {54, _} = Some.Module.func(45) 
end 

Zauważ, że kolejność została odwrócona jako _ mogą pojawiać się tylko na lewej stronie operatora =, inaczej otrzymasz CompileError który jest co otrzymujesz :

iex(3)> 3 = _ 
** (CompileError) iex:3: unbound variable _ 
    (elixir) src/elixir_translator.erl:17: :elixir_translator.translate/2 

można również zrobić:

test "some method" do 
    {result, _} = Some.Module.func(45) 
    assert result == 54 
end 

które mogą działać w sytuacjach, gdy Waszyngton nt, aby wykonać wiele asercji na wyniku.