Игра нарисована! Сборка кода и прохождение тестов

Теперь мы напишем код нашего модуля Game, следуя тестам.

# lib/game.ex

defmodule Game do
  @moduledoc """
  Documentation for `Game`.
  """
end
Вход в полноэкранный режим Выход из полноэкранного режима

Если мы запустим тесты сейчас:

mix test
Войти в полноэкранный режим Выйти из полноэкранного режима

Мы увидим сбои в тестах:

  1) test Game.play/2 when the players draw when all players choose scissor (GameTest)
     test/game_test.exs:27
     ** (UndefinedFunctionError) function Game.play/2 is undefined or private
     code: assert {:ok, match} = Game.play(first_player_choice, second_player_choise)
     stacktrace:
       (rock_paper_scissor_elixir 0.1.0) Game.play(3, 3)
       test/game_test.exs:31: (test)


  2) test Game.play/2 when the players draw when all players choose paper (GameTest)
     test/game_test.exs:18
     ** (UndefinedFunctionError) function Game.play/2 is undefined or private
     code: assert {:ok, match} = Game.play(first_player_choice, second_player_choise)
     stacktrace:
       (rock_paper_scissor_elixir 0.1.0) Game.play(2, 2)
       test/game_test.exs:22: (test)


  3) test Game.play/2 when the players draw when all players choose stone (GameTest)
     test/game_test.exs:9
     ** (UndefinedFunctionError) function Game.play/2 is undefined or private
     code: assert {:ok, match} = Game.play(first_player_choice, second_player_choise)
     stacktrace:
       (rock_paper_scissor_elixir 0.1.0) Game.play(1, 1)
       test/game_test.exs:13: (test)



Finished in 0.02 seconds (0.00s async, 0.02s sync)
3 tests, 3 failures
Войти в полноэкранный режим Выход из полноэкранного режима

Давайте сделаем так, чтобы эти тесты прошли

Во-первых, мы должны создать функцию play, передающую два аргумента, first_player_choice и second_player_choice:

defmodule Game do
  @moduledoc """
  Documentation for `Game`.
  """

  def play(first_player_choice, second_player_choice) do
  end
end

Вход в полноэкранный режим Выход из полноэкранного режима

Затем давайте повторно запустим тесты:

mix test
Вход в полноэкранный режим Выход из полноэкранного режима
 1) test Game.play/2 when the players draw when all players choose stone (GameTest)
     test/game_test.exs:9
     match (=) failed
     code:  assert {:ok, match} = Game.play(first_player_choice, second_player_choise)
     left:  {:ok, match}
     right: nil
     stacktrace:
       test/game_test.exs:13: (test)



  2) test Game.play/2 when the players draw when all players choose scissor (GameTest)
     test/game_test.exs:27
     match (=) failed
     code:  assert {:ok, match} = Game.play(first_player_choice, second_player_choise)
     left:  {:ok, match}
     right: nil
     stacktrace:
       test/game_test.exs:31: (test)



  3) test Game.play/2 when the players draw when all players choose paper (GameTest)
     test/game_test.exs:18
     match (=) failed
     code:  assert {:ok, match} = Game.play(first_player_choice, second_player_choise)
     left:  {:ok, match}
     right: nil
     stacktrace:
       test/game_test.exs:22: (test)



Finished in 0.03 seconds (0.00s async, 0.03s sync)
3 tests, 3 failures
Войти в полноэкранный режим Выход из полноэкранного режима

Теперь нам нужно гарантировать, что игра будет рисовать, если игрок выберет один и тот же предмет:

defmodule Game do
  @moduledoc """
  Documentation for `Game`.
  """

  def play(first_player_choice, second_player_choice) do
    result(first_player_choice, second_player_choice)
  end

  defp result(first_player_choice, second_player_choice) do
    cond do
      first_player_choice == second_player_choice -> {:ok, "Draw!"}
    end
  end
end

Войти в полноэкранный режим Выход из полноэкранного режима

А теперь, если мы повторно запустим тесты:

mix test
Войти в полноэкранный режим Выйти из полноэкранного режима

Все прошло, и все было в порядке.

...

Finished in 0.02 seconds (0.00s async, 0.02s sync)
3 tests, 0 failures

Randomized with seed 352470
Вход в полноэкранный режим Выход из полноэкранного режима

В следующем посте мы построим тесты, охватывающие сценарий, когда побеждает первый игрок.

Контакты

Электронная почта: contato@diegonovais.com.br
Linkedin: https://www.linkedin.com/in/diegonovais/
Twitter: https://twitter.com/diegonovaistech

Оцените статью
devanswers.ru
Добавить комментарий