2014-09-01 3 views
1

개체가 특정 경우에 최적화를 사용하는지 테스트하려고합니다. 그래서 Ruby Rspec3는 내부 메소드에 대한 호출을 한 번받을 것으로 예상합니다.

class Bar 
    attr_reader :n 
    def initialize(n) 
    @n=n 
    end 

    def a 
    if @n <= 3 
     b1 
    else 
     b2 
    end 
    end 

    def b1 
    @n+=1 
    end 

    def b2 
    @n+=1 ##super fast addition 
    end 
end 

내가 작성하려고 코드

의 종류가 그런 RSpec에

bar=Bar.new(5) 
allow(bar).to receive(:b2).and_call_original 

bar.a 
expect(bar).to receive(:b2).once 
expect(bar.n).to eq 6 

그러나 그것은 작동하지 않습니다 ... 당신이 kown 것이 가능합니까? 그렇다면 어떻게?

답변

2

전에 메서드 호출을 으로 바꾸고 receive을 입력해야합니다. 지금

bar = Bar.new(5) 
expect(bar).to receive(:b2).once.and_call_original 
bar.a 
expect(bar.n).to eq 6 
+0

감사합니다, 내 테스트 작업 : 또한 당신은 하나의 라인으로 allowexpect을 병합 할 수 있습니다 – ebuprofen