Я бы переместил весь код внутри , в то время как -loop, в отдельный метод.Таким образом, вы можете легко протестировать его, введя в него различные старые игровые состояния в качестве входных данных и проверив, что они успешно обработаны (чтобы получить new игровое состояние).Обратите внимание, что код, который следует принципам функционального программирования, проще тестировать (new_state = process(old_state)
), но в любом случае вы все равно можете проводить тестирование как есть, проверяя, обновляется ли @gui
так, как вы ожидаете, учитывая предыдущее состояние.
Ваш основной метод play_game
теперь будет таким простым:
def play_game
process(@gui) until game_over?
end
[править] Позвольте мне показать реальный пример.Чтобы поиграть с Raphael.js и CoffeeScript, я написал движок Reversi ( reversi.coffee и здесь spec ).Код основного цикла в вашем вопросе здесь изолирован функцией без сохранения состояния: move
.Так что я могу сделать new_state = move(old_state)
и протестировать его со всеми парами * old_state * / * Ожидаемое_новое_статы * Я считаю нужным.