2012-03-22 7 views
6

Ho un metodo che contiene un blocco di avvio/salvataggio. Come posso testare il blocco di salvataggio usando RSpec2?Utilizzo di RSpec Come posso testare i risultati di un blocco di eccezioni di salvataggio

class Capturer 

    def capture 
    begin 
     status = ExternalService.call 
     return true if status == "200" 
     return false 
    rescue Exception => e 
     Logger.log_exception(e) 
     return false 
    end 
    end 

end 

describe "#capture" do 
    context "an exception is thrown" do 
    it "should log the exception and return false" do 
     c = Capturer.new 
     success = c.capture 
     ## Assert that Logger receives log_exception 
     ## Assert that success == false 
    end 
    end 
end 
+1

FYI vedere [Perché lo stile è scorretto per 'salvare Eccezione => e' in Ruby?] (Https://stackoverflow.com/q/10048173/211563). –

risposta

8

Usa should_receive e should be_false:

context "an exception is thrown" do 
    before do 
    ExternalService.stub(:call) { raise Exception } 
    end 

    it "should log the exception and return false" do 
    c = Capturer.new 
    Logger.should_receive(:log_exception) 
    c.capture.should be_false 
    end 
end 

Si noti inoltre che si dovrebbe non essere salvata da Exception, ma qualcosa di più specifico. Exception copre tutto, che non è quasi sicuramente quello che vuoi. Al massimo dovresti essere in grado di salvare da StandardError, che è l'impostazione predefinita.

+0

Sì, ma questo non fa eccezione. – Nick

+0

La tua domanda in realtà non chiede quella parte, ma ho comunque aggiornato la mia domanda con essa, oltre a una nota aggiuntiva. –

+0

Richiede specificamente ** Come faccio a testare il blocco di salvataggio usando RSpec2? ** – Nick

Problemi correlati