Мокко ожидается максимум один раз, вызывается дважды, но метод явно вызывается только один раз

Я использую Мокко для пробного тестирования. Ниже приведен соответствующий код:

# test_player.rb
should "not download the ppg more than once for a given year" do
  @durant.expects(:fetch_points_per_game).at_most_once
  ppg = @durant.points_per_game
  ppg2= @durant.points_per_game
  assert_equal ppg, ppg2, "A player should have a points per game"
end

# player.rb
class Player
  # ...

  def points_per_game(year=Date.today.year)
    @points_per_game ||= fetch_points_per_game(year)
  end
  alias_method :ppg, :points_per_game

  private

  def fetch_points_per_game(year=Date.today.year)
    31.2
  end
end

Тест не пройден, и он пожаловался на "неожиданный вызов: #.fetch_points_per_game(any_parameters)"

Насколько я понимаю, мой код: если @point_per_game равен nil, вызывается fetch_points_per_game, в противном случае результат кэшируется для будущих вызовов points_per_game. Так почему же тест жалуется на то, что fetch_points_per_game был вызван дважды?

1 ответ

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

@durant.expects(:fetch_points_per_game).at_most_once.returns(1.23)

Вы должны найти, что тесты теперь проходят.

Другие вопросы по тегам