У меня есть контроллер на основе MHartl RoR4 Tutorial
И так же, как MHartl, я не использую 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+"\ 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
.