私はrspec2とレール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
私はchoose_a_winner_for_attackの中に "place.object_id"と "object_id"を印刷していますが、それらは同じです。 – Breezeight
あなたの仕様のコードを投稿できますか? –