2010-12-16 20 views
14

¿Cómo puedo probar rescue_from es RSpec? Me gustaría asegurarme de que, si se produce una de las excepciones, el controlador configura correctamente el flash y lo redirecciona. ¿Hay alguna manera de simular la excepción?RSpec: Prueba rescue_from

rescue_from PageAccessDenied do 
    flash[:alert] = "You do not have the necessary roles to access this page" 
    redirect_to root_url 
    end 

    rescue_from CanCan::AccessDenied do |exception| 
    flash[:alert] = exception.message 
    redirect_to root_url 
    end 

Respuesta

14

Suponiendo que haya un método authorize! que plantea la excepción, debe ser capaz de hacer algo como esto:

describe "rescue_from exceptions" do 
    it "rescues from PageAccessDenied" do 
     controller.stub(:authorize!) { raise PageAccessDenied } 
     get :index 
     response.should redirect_to("/") 
     flash[:alert].should == "You do not have the necessary roles to access this page" 
    end 
    end 
+6

Aún mejor solución: https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs/anonymous-controller – kaihowl

+0

No entiendo el código auxiliar ... Me parece que hace que el controlador provoque ese error en una prueba. ¿Cómo puede estar seguro de que aumentará el error en la producción si solo está fingiendo en las pruebas? – hamstar

+0

@hamstar Esto solo prueba el comportamiento del bloque 'rescue_from'. Para asegurarse de que 'authorize!' Genera un error, debe escribir otra prueba para eso. Presumiblemente, esto sucede en una biblioteca (¿CanCan?) Y el autor ha escrito la prueba allí. – zetetic