2016-10-25 2 views
1

Salut J'ai un projet avec une capacité:L'utilisation CanCanCan en vue des tests à défaut

can :set_to_user, Post 

je puis dans un de mes vues:

<div class: "btn btn-primary #{disable_button(!(can_set_to_user))}> 

dans une aide que j'ai:

def can_set_to_user pouvez-vous? : set_to_user, poste fin

Cela fonctionne très bien lorsque j'exécute le serveur, mais quand je lance mes tests, ils semblent se bloquer en donnant cette erreur?

ActionView::Template::Error: 
     Devise could not find the `Warden::Proxy` instance on your request environment. 
     Make sure that your application is loading Devise and Warden as expected and that the `Warden::Manager` middleware is present in your middleware stack. 
     If you are seeing this on one of your tests, ensure that your tests are either executing the Rails middleware stack or that your tests are using the `Devise::Test::ControllerHelpers` module to inject the `request.env['warden']` object for you. 

Je ne suis pas sûr de ce qui cause, mais toute aide serait grande

Répondre

2

Warden::Proxy est utilisé pour les méthodes current_user et user_signed_in?. Vous devez bouchonner ces méthodes dans les spécifications de votre vue pour le rendre fonctionne:

let(:user) { FactoryGirl.create :user } 

before(:example) do 
    allow(view).to receive(:current_user).and_return(user) 
    allow(view).to receive(:user_signed_in?).and_return(!!user) 
end 

Voir la devise source