RSpec: как заглушить унаследованный метод current_user (без Devise)?

У меня есть контроллер на основе MHartlRoR4 Учебник

И так же, как Мартл,Я не использую DeviseЯсвернул мою собственную систему аутентификации

Возникли проблемы с RSpec дляUsersController#Edit так как представление имеет вызовcurrent_user.admin? и контроллер вызывает@path_switch = path_switch

Я продолжаю получать ошибки RSpec в соответствии с:

1) User Pages Edit 
 Failure/Error: visit edit_user_path(user)
 NoMethodError:
   undefined method `admin?' for nil:NilClass
 # ./app/controllers/users_controller.rb:106:in `path_switch'
 # ./app/controllers/users_controller.rb:53:in `edit'
 # ./spec/requests/user_pages_spec.rb:54:in `block (3 levels) in <top (required)>'

UsersController:

class UsersController < ApplicationController
  ...
  def edit
    @user = User.find(params[:id])
    @path_switch ||= path_switch                        #error
  end
  ...
  def path_switch
    if current_user.admin?                               #error
      users_path
    else
      root_path
    end
  end
end

я нашел этодействительно полезная статья это дает мне надежду, что я на правильном пути, но я не могу заставить его работать.

Вот, насколько я получил (обновлено):

user_pages_spec.rb:

require 'spec_helper'
require 'support/utilities'

describe "User Pages" do
  #include SessionsHelper

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

  subject { page }

  describe "Edit" do
    before do
      sign_in(user)
      visit edit_user_path(user) 
    end

    it '(check links and content)' do
      should have_button('Submit')
      should have_link('Cancel')
      should have_content(user.fname+"\'s profile")
    end
   ...
  end
...
end

Ноcurrent_user все еще возвращаетсяnil

Любая помощь / руководство приветствуется. Спасибо!

Добавлениеinclude SessionsHelper к началу опишите блок моегоuser_pages_edit.rb кажется, пытается использовать sign_in (путь) от этого помощника. Созданиепроблема между RSpec иcookies.permanent, Так что это перебор.

к несчастьюэто возвращает меня прямо к моему.admin? ошибка.

Есть два звонкаcurrent_user.admin?

Один в контроллере:

  def path_switch
    if current_user.admin?    #error current_user == nil
      users_path
    else
      root_path
    end
  end

Один виден как ERB:

<% if current_user.admin? %>
  <div class="row  col-xs-6 col-sm-6 col-md-3">
    <div class="input-group input-selector">
    ...

Все, что мне нужно сделать, это выяснить, как установитьcurrent_user.admin = true и передать его контроллеру (а затем, надеюсь, представлению), чтобы страница могла загрузиться. Для этого все, что мне нужно сделать, это установитьcurrent_user = user так какuser.admin == true.

Ответы на вопрос(3)

Ваш ответ на вопрос