2012-03-22 13 views
6

Tengo un método que tiene un bloque de inicio/rescate. ¿Cómo pruebo el bloque de rescate usando RSpec2?Usando RSpec, cómo puedo probar los resultados de un bloque de excepción de rescate

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 ver [¿Por qué es malo estilo 'rescatar Exception => e' en Ruby?] (Https://stackoverflow.com/q/10048173/211563). –

Respuesta

8

Uso should_receive y 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 

También tenga en cuenta que usted debe no ser rescatado de Exception, pero algo más específico. Exception cubre todo, que es casi definitivamente no es lo que quiere. Como máximo, deberías estar rescatando de StandardError, que es el valor predeterminado.

+0

Sí, pero eso no plantea la excepción. – Nick

+0

Su pregunta realmente no solicita esa parte, pero de todos modos he actualizado mi pregunta, así como una nota adicional. –

+0

Pregunta específicamente ** ¿Cómo pruebo el bloque de rescate usando RSpec2? ** – Nick

Cuestiones relacionadas