Как написать тест на эликсир для проверки пустого набора карт - PullRequest
1 голос
/ 17 апреля 2019

Просто узнаю о тестах в Elixir, и я пытаюсь написать тест для Elixir, чтобы убедиться, что структура будет содержать два пустых MapSets.

defstruct [:coordinates, :hit_coordinates]

@doc """
  Creates a new Island structure

  ## Examples

    iex> IslandsEngine.Island.new()
    %IslandsEngine.Island { coordinates: #MapSet<[]>, hit_coordinates: #MapSet<[]> }

"""
def new(), do:
  %Island{ coordinates: MapSet.new(), hit_coordinates: MapSet.new() }

Когда я запускаю это с помощью mix test, я получаюследующая ошибка:

Compiling 1 file (.ex)

  1) doctest IslandsEngine.Island.new/0 (1) (IslandsEngine.IslandTest)
     test/islands_engine/island_test.exs:3
     Doctest did not compile, got: (TokenMissingError) lib/islands_engine/island.ex:19: missing terminator: } (for "{" starting at line 19)
     code: %IslandsEngine.Island { coordinates: #MapSet<[]>, hit_coordinates: #MapSet<[]> }
     stacktrace:
       lib/islands_engine/island.ex:19: IslandsEngine.Island (module)

.......

Finished in 0.1 seconds
6 doctests, 2 tests, 1 failure

Все же все отлично работает в сеансе IEx:

iex> IslandsEngine.Island.new()
%IslandsEngine.Island{coordinates: #MapSet<[]>, hit_coordinates: #MapSet<[]>}
iex>

Спасибо за любую помощь!

1 Ответ

1 голос
/ 17 апреля 2019

Вам нужно иметь код, создающий правильный ответ вместо текстового представления в вашем тесте.Поэтому вместо:

%IslandsEngine.Island{coordinates: #MapSet<[]>, hit_coordinates: #MapSet<[]>}

Do:

%IslandsEngine.Island{coordinates: %MapSet{}, hit_coordinates: %MapSet{}}

Я полагаю, что в этом случае пример имеет небольшое значение в качестве теста, потому что он просто копирует код, но все равно может бытьдействителен как документация.

...