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 leWarden::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 moduleDevise::Test::ControllerHelpers
pour injecter lerequest.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.
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
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
Ajouter
config.include Devise::Test::ControllerHelpers, type: :controller
dans votre fichier Rails_helper.rb.
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)
...
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é