2010-12-16 14 views
14

Jak mogę przetestować rescue_from to RSpec? Chciałbym się upewnić, że jeśli podniesiony zostanie jeden z wyjątków, kontroler prawidłowo ustawi flash i wykona przekierowanie. Czy istnieje sposób symulacji wyjątku?RSpec: Testowanie 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 

Odpowiedz

14

Zakładając, że masz sposób authorize! który podnosi wyjątek, powinieneś być w stanie zrobić coś takiego:

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

Jeszcze lepsze rozwiązanie: https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs/anonymous-controller – kaihowl

+0

Nie rozumiem kodu pośredniczącego ... Wydaje mi się, że robisz kontroler podnoszący ten błąd w teście. Jak możesz być pewien, że zwiększy to błąd w produkcji, jeśli tylko udajesz go w testach? – hamstar

+0

@hamstar Testuje to tylko zachowanie bloku 'rescue_from'. Aby upewnić się, że 'autoryzuj!' Powoduje błąd, należy napisać inny test na to. Przypuszczalnie dzieje się tak w bibliotece (CanCan?), A autor napisał tam test. – zetetic

Powiązane problemy