2014-05-01 84 views
1

我怎樣才能用RSpec測試一些代碼與#exit!測試出口!與RSpec

def method 
    ... 
rescue MyError => e 
    logger.error "FATAL ERROR" 
    exit! 1 
end 

我可以#exit方法測試此代碼,因爲提高SystemExit例外。

it "logs a fatal error" do 
    lambda do 
    object.method 
    expect(logger).to have_received(:error).with("FATAL ERROR") 
    end 
end 

it "exits" do 
    expect { object.method }.to raise_error(SystemExit) 
end 

我不確定是否可以實現類似的功能。我正在考慮在Kernel模塊中重新實現exit!方法,僅用於規範。有任何想法嗎?

+0

你就不能存根呢? – BroiSatse

回答

1

您可以存根exit!方法爲對象:

it "logs a fatal error" do 
    lambda do 
    allow(object).to receive(:exit!) 
    object.method 
    expect(logger).to have_received(:error).with("FATAL ERROR") 
    end 
end 

it "exits" do 
    expect(object).to receive(:exit!) 

    object.method 
end 
+0

問題是,當RSpec讀'退出!'停止運行下一個測試。 –

+1

如果'exit!'方法被剔除,則不需要... –

+0

我無法創建被測試類的雙重對象。你能提供一個更完整的例子嗎? –