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
常に true を返します end ログ「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)
ここに問題があります。スタブ化されたメソッドが呼び出されることを期待していました。