我有一个基于 MHartl 的控制器RoR4 教程 http://www.railstutorial.org/book/_single-page
就像 MHartl 一样,我没有使用设计, I 推出了我自己的身份验证系统 http://www.railstutorial.org/book/_single-page#sidebar-roll_your_own
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)>'
用户控制器:
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
我找到了这个非常有帮助的文章 http://leeourand.com/2014/02/09/stub-that-object/这让我希望自己走在正确的轨道上,但我无法让它发挥作用。
据我所知(更新):
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
But current_user
还在回来nil
任何帮助/指导表示赞赏。谢谢!
Adding include SessionsHelper
到顶部描述我的块user_pages_edit.rb
似乎尝试使用该助手的sign_in(path)。创建一个RSpec 和之间的问题cookies.permanent https://stackoverflow.com/questions/21503397/undefined-method-permanent-when-attempting-to-create-a-cookie。所以这就是半身像。
很遗憾,这让我回到了我的.admin?
error.
有两个电话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
.