web-dev-qa-db-fra.com

Helper Devise: impossible de trouver l'instance `Warden :: Proxy` dans l'environnement de requête

J'essaie d'utiliser Devise pour mon application Rails. Je peux m'inscrire et me connecter, mais lorsque je vais sur mon autre page "build", l'erreur suivante apparaît:

Devise :: MissingWarden in Home # show Devise n'a pas pu trouver le Warden::Proxy instance sur votre environnement de demande. Sois sûr que votre application charge Devise et Warden comme prévu et que le Warden::Manager Le middleware est présent dans votre pile de middleware. Si vous voyez ceci sur l'un de vos tests, assurez-vous que vos tests sont soit en exécutant la pile de middleware Rails ou en indiquant que vos tests sont en utilisant le module Devise::Test::ControllerHelpers pour injecter le request.env['warden'] objet pour vous.

Voici mon contrôleur:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  private
  # Overwriting the sign_out redirect path method
  def after_sign_out_path_for(resource_or_scope)
    build_path
  end
end

Voici mes deux vues partielles:

<!-- views/devise/menu/_login_items.html.erb -->
<% if user_signed_in? %>
  <li>
  <%= link_to('Logout', destroy_user_session_path, :method => :delete) %>
  </li>
<% else %>
  <li>
  <%= link_to('Login', new_user_session_path)  %>
  </li>
<% end %>

et

<!-- views/devise/menu/_registration_items.html.erb -->
<% if user_signed_in? %>
  <li>
  <%= link_to('Edit registration', edit_user_registration_path) %>
  </li>
<% else %>
  <li>
  <%= link_to('Register', new_user_registration_path)  %>
  </li>
<% end %>

Après le débogage, j'ai compris que le problème venait de cette ligne dans mon contrôleur "show": template = HomeController.render ('layouts/_template')

Merci de votre aide.

11
AlphaNico

Sur la base de ce SO answer , vous devez inclure le module Devise::Test::ControllerHelpers dans les spécifications de votre contrôleur. Ajoutez ce qui suit à votre Rails_helper:

RSpec.configure do |config|
  config.include Devise::Test::ControllerHelpers, type: :controller
end
18
Obromios

J'ai eu cette erreur et ne pouvais trouver de réponse nulle part ailleurs. C'était après avoir laissé tomber et créé la base de données. Mais je n'ai pas chargé le schéma.

Cela a résolu le problème:

rake db:drop db:create db:schema:load
1
A B

Ajouter

config.include Devise::Test::ControllerHelpers, type: :controller

dans votre fichier Rails_helper.rb.

1
Neeraj Kumar

J'ai rencontré un problème similaire lors du test de vues dans lesquelles "current_user" était présent dans certaines conditions.

Je l'ai résolu avec ceci:

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

before(:each) do
  allow(view).to receive(:current_user).and_return(user)
  ...
0
Alfredo Roca Mas

Eh bien, j’ai fait face au même problème "Le système ne peut pas trouver le préfet :: proxy dans actioncable" Il peut être résolu en transmettant le user_id actuel à votre méthode perform dans votre travail car vous pourriez accéder à rendu par diffusion et en raison de ce problème a été causé

0
Asad Hameed