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
.