2011-02-05 4 views
2

rspec으로 테스트 할 때 비 정적 메서드에 전달되는 인수를 확인할 수 있습니까?Rspec에서 비 정적 메소드를 테스트 하시겠습니까?

클래스 A를 테스트하려면 클래스 B를 호출해야합니다. B는 이미 테스트를 마쳤습니다. 내가 테스트 할 유일한 것은 내가 b.calling에 들어오는 인수를 테스트하려면 어떻게 B.

class A 
    def method 
    number = 10 
    b = B.new 
    b.calling(number) 
    end 
end 

class B 
    def calling(argument) 
    # This code in this class is already testet 
    end 
end 

에 들어오는 인수입니까?

나는 이것을 시도했지만 성공하지 못했습니다.

it "should work" do 
    b = mock(B) 
    b.should_receive(:calling).at_least(1).times 
    A.new.method 
end 

항상 실패, beacuse b는 호출되지 않았습니다.

답변

4

귀하의 사양에 B는 B A가 (당신이 당신이 그것을 스텁을 갖고 있지 않기 때문에 새로운 전화 B의 실제 인스턴스를 반환) 인스턴스화되어 있지 않으며,이 시도 :

it "should work" do 
    b = mock(B) 
    B.should_receive(:new).and_return(b) 
    b.should_receive(:calling).at_least(1).times 
    A.new.method 
end 
+0

감사합니다, 그것은 일했다! – Oleander

+0

+1하지만, OP는 정말로 스스로에게 'B'가 처음에 어떻게 구성되는지에 대해 'A'가 왜 알고 있는지 물어야합니다. 또는'method'가'B'를 만들고 즉시 그것을 버리는 이유. –

+0

네, 비록 병적 인/교육적인 예라고 생각합니다. a.method (b)와 같이 인수로 전달 될 때 b에 대한 호출을 주장하는 것이 더 일반적입니다. – nruth

관련 문제