2016-10-31 5 views
0

Я пытаюсь использовать файл application.html.erb для создания навигационной панели на всех моих страницах. Я хочу, чтобы некоторые ссылки, чтобы показывать только если пользователь вошел в систему, а некоторые, чтобы показать, если пользователь не вошел в систему, так что я следующее просмотров/макеты/application.html.erb:Проверка, если пользователь-разработчик зарегистрирован в макете приложения

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

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

Это работает, когда я иду на сайт, но проблема возникает, когда я пытаюсь проверить с помощью рейка.

Когда я запускаю свои тесты, я получаю следующее сообщение об ошибке:

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.

Всех подобных ошибок я нашел в Интернете, кажется, не относится к этой ситуации. Я понимаю, что проблема заключается в том, что Devise не загружается во время тестирования, но не может понять, как его исправить. Я пробовал много разных вещей, и ничего не сработало.

Любая помощь приветствуется. Благодаря!

+1

Возможный дубликат: HTTP : //stackoverflow.com/questions/38421853/why-is-my-rspec-not-loading-devisetestcontrollerhe lpers –

+0

Я не использую RSpec, так что решение не работает – dcod

+0

Это правда, я думаю, что проблема в принципе такая же. Я добавил ответ ниже, который должен работать для модульных тестов. –

ответ

0

если вы используете Devise? попробуйте использовать current_user.present? не user_signed_in

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

и в вашем ApplicationController добавить этот

protect_from_forgery with: :exception 
    before_action :configure_permitted_parameters, if: :devise_controller? 
Смежные вопросы