2016-10-31 18 views
0

Ich versuche, die application.html.erb-Datei zu verwenden, um eine Navigationsleiste auf allen meinen Seiten zu erstellen. Ich möchte einige der Links zu nur angezeigt, wenn ein Benutzer angemeldet ist, und einige zu zeigen, wenn ein Benutzer nicht angemeldet ist, so habe ich die folgenden in Ansichten/Layouts/application.html.erb:Überprüfen, ob Benutzer angemeldet im Anwendungslayout ist

... 
<% if user_signed_in? %> 
    # Show some links 
<% end %> 

<% if not user_signed_in? %> 
    # Show some other links 
<% end %> 
... 

Das funktioniert, wenn ich auf die Seite gehe, aber das Problem kommt, wenn ich versuche, mit Rake zu testen.

Wenn ich meine Tests laufen lasse, erhalte ich folgende Fehlermeldung:

AppointmentsControllerTest#test_should_get_index: 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.

All der ähnlichen Fehler ich online scheint nicht gefunden, um diese Situation zu übernehmen. Ich verstehe, dass es ein Problem gibt, wenn Devise beim Testen nicht geladen wird, aber nicht herausfinden kann, wie es zu beheben ist. Ich habe viele verschiedene Dinge ausprobiert und nichts hat funktioniert.

Jede Hilfe wird geschätzt. Vielen Dank!

+1

Mögliche doppelte: http : //stackoverflow.com/questions/38421853/why-is-my-rspec-not-loading-devisetestcontrollerhe lpers –

+0

Ich verwende RSpec nicht, so dass die Lösung nicht funktioniert – dcod

+0

Das stimmt, ich denke, das Problem ist im Grunde das gleiche obwohl. Ich habe unten eine Antwort hinzugefügt, die für Komponententests funktionieren sollte. –

Antwort

0

wenn Sie Devise verwenden? versuche current_user.present zu benutzen? user_signed_in nicht

<% if current_user.present? %> 
    <%= some links %> 
<%else%> 
    <%= some links %> 
<% end %> 

und in Ihrem Application fügen Sie diese

protect_from_forgery with: :exception 
    before_action :configure_permitted_parameters, if: :devise_controller? 
Verwandte Themen