rspec2와 레일스 3에 문제가 있습니다. 스텁 된 메소드는 동일한 클래스의 메소드에 의해 호출 된 것이 아니라 직접 호출하는 경우에만 호출됩니다. RSpec2 : 다른 메소드에 의해 호출 된 메소드를 스터브
이
내 모델 :place.stub!(:choose_a_winner_for_attack).and_return(true)
을 한 후 나는 전화 : 사양에
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.choose_a_winner_for_attack 0
을 return always always true 나는 "REAL choose_a_winner_for_attack"로그를 보지 못한다.
는하지만 호출하는 경우 :
place.attacks(…)
는 실제 방법 "choose_a_winner_for_attack을"(I 로그 "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
사양에 맞는 코드를 게시 할 수 있습니까? –