it-roy-ru.com

Helper Devise: не удалось найти экземпляр `Warden :: Proxy` по запросу

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

Devise :: MissingWarden в Home # show Devise не может найти экземпляр Warden::Proxy в вашей среде запросов. Убедитесь, что ваше приложение загружает Devise и Warden, как и ожидалось, и что промежуточное ПО Warden::Manager присутствует в вашем стеке промежуточного ПО. Если вы видите это на одном из ваших тестов, убедитесь, что ваши тесты либо выполняют стек промежуточного программного обеспечения Rails, либо что ваши тесты используют модуль Devise::Test::ControllerHelpers для внедрения объекта request.env['warden'] для вас.

Вот мой контроллер:

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

Вот мои два частичных взгляда:

<!-- 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 %>

а также

<!-- 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 %>

После отладки я выяснил, что проблема связана с этой строкой в ​​моем контроллере "show": template = HomeController.render ('layouts/_template')

Спасибо за вашу помощь.

11
AlphaNico

Исходя из этого SO ответа вам необходимо включить модуль Devise::Test::ControllerHelpers в спецификации вашего контроллера. Добавьте следующее в ваш Rails_helper:

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

У меня была эта ошибка, и я не мог найти ответ где-либо еще. Это было после падения и создания БД. Но я не загружал схему.

Это исправило это:

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

Добавлять

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

в вашем файле Rails_helper.rb.

1
Neeraj Kumar

У меня была похожая проблема при тестировании представлений, где current_user присутствовал в некоторых условных выражениях.

Я решил это с этим:

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

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

Ну, я столкнулся с той же проблемой: «devise не может найти warden :: proxy в actioncable». Это можно решить, передав текущий метод user_id в ваш метод execute в вашей работе, поскольку вы, возможно, обращаетесь к текущему пользователю в своем представлении, которое вы рендеринг через трансляцию и из-за этого возникла проблема

0
Asad Hameed