2
我遇到了rspec2和rails 3的問題。僅當我直接調用它時,才調用存根方法,而不是如果它被同一類的方法調用。RSpec2:存根被另一個方法調用的方法
這是我的模型:
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」)。
UPDATE 此規範的代碼:
#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)
這裏有問題,我期待存根方法被調用。
既然你沒有顯示真正的代碼,你肯定有存根的對象,是一樣的接收`attacks`方法? – nathanvda 2011-01-24 14:09:11
我在choose_a_winner_for_attack裏打印「place.object_id」和「object_id」,它們是一樣的。 – Breezeight 2011-01-24 18:44:26