У меня проблема с rspec2 и rails 3. Метод заглушки вызывается, только если я вызываю его напрямую, а не если он вызывается методом того же класса.
Это моя модель:
class Place < ActiveRecord::Base
def choose_a_winner_for_attack (p_attack)
puts "REAL choose_a_winner_for_attack"
(rand() < p_attack)
end
def attacks(attacked_place, attack_deployments)
….
win = choose_a_winner_for_attack(p_attack)
….
end
end
В спецификации, после создания нового места, я заглушаю его:
place.stub!(:choose_a_winner_for_attack).and_return(true)
, а затем я вызываю:
place.choose_a_winner_for_attack 0
всегда возвращается истинный конецЯ никогда не вижу журнал "REAL choose_a_winner_for_attack".
Но если я вызываю:
place.attacks(…)
, он вызывает реальный метод "choose_a_winner_for_attack" (я вижу журнал "REAL choose_a_winner_for_attack").
ОБНОВЛЕНИЕ Этот код спецификации:
#Stub Place
place = @user0.place
place.stub!(:choose_a_winner_for_attack).and_return(true)
puts "INSIDE SPEC #{f.object_id} #{f.choose_a_winner_for_attack 0}"
place.attacks(other_place, deployments)
Здесь есть проблема, я ожидал, что вызван метод с заглушкой.