2010-12-16 4 views
14

Comment puis-je tester rescue_from est RSpec? Je voudrais m'assurer que si l'une des exceptions est soulevée, que le contrôleur définit correctement le flash et fait la redirection. Existe-t-il un moyen de simuler l'exception?RSpec: Test 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 

Répondre

14

En supposant que vous avez une méthode authorize! qui soulève l'exception, vous devriez être en mesure de faire quelque chose comme ceci:

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

solution encore meilleure: https://www.relishapp.com/rspec/rspec-rails/docs/contrôleur-specs/contrôleur-anonyme – kaihowl

+0

Je ne comprends pas le bout ... me semble que vous faites le contrôleur soulever cette erreur dans un test. Comment pouvez-vous être sûr que cela augmentera l'erreur dans la production si vous faites semblant juste dans le test? – hamstar

+0

@hamstar Ceci ne fait que tester le comportement du bloc 'rescue_from'. Pour vous assurer que 'authorize! 'Génère une erreur, vous devez écrire un autre test pour cela. Vraisemblablement, cela se passe dans une bibliothèque (Cancan?) Et l'auteur y a écrit le test. – zetetic