2013-02-27 2 views
0

여러 운영체제에서 코드를 실행하지 않고도 클래스 메소드의 동작을 테스트하려고합니다.RSpec에서 외부 루비 보석의 메소드를 스텁하는 방법은 무엇입니까?

def get_os() 
    if OS.linux? 
     return "linux#{OS.bits}" 
    elsif OS.mac? 
     return "mac" 
    elsif OS.doze? 
     return "win" 
    end 

나는 당신이 이것을 실행할 수있는 간단한 테스트 프로젝트 here

를 만들었습니다 : 나는 OS Rubygem

내가 RSpec에이 함수의 3 케이스를 테스트 할 사용하고

git clone git://github.com/trinitronx/rspec-stubmock-test.git 
cd rspec-stubmock-test/ 
bundle install 
rspec 

수동으로 OS.*? 메서드를 재정의하려고 시도했지만 작동하지 않는 것 같습니다. 어떻게해야합니까?

답변

3

당신은 다음과 같은 방법을 스텁 할 수 있어야한다 :

describe "#get_os" do 

    subject { TestMe.new.get_os } 

    context "on a linux machine" do 

    before do 
     OS.stub(linux?: true, mac?: false, doze?: false, bits: 64) 
    end 

    it { should eq 'linux64' } 
    end 

    context "on a mac" do 

    before do 
     OS.stub(linux?: false, mac?: true, doze?: false, bits: 64) 
    end 

    it { should eq 'mac' } 
    end 

    # etc etc 
end 
+0

감사합니다! 예상대로 작동합니다.^_ ^ – TrinitronX