2013-03-20 48 views
0

这是一种当编辑方法跑了用户控制器rspec的+设计:CURRENT_USER是缺少属性方法时rspec的是跑

def correct_user?(post) 
    post.user == current_user || current_user.admin 
end 

这是我正在

测试跑的过滤方法之一
describe PostsController do 
    subject { page } 

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

    describe "Admin user see edit view of someone else's post:" do 
    before do 
     sign_in first_user_is_admin 
     visit edit_post_path(post) 
    end 

    describe "Post is not anonymous with user_id" do 
     let(:post) { FactoryGirl.create(:post, :user => first_user_is_admin) } 
     before do 
     visit edit_post_path(post) 
     end 
     it { current_path.should == edit_post_path(post) } 
    end 
    end 
end 

当这个测试运行时,它失败,因为

Failure/Error: visit edit_post_path(post) 
NoMethodError: 
    undefined method `admin' for nil:NilClass 

我觉得这很奇怪,因为post.user == current_user部分代码没问题。所以current_user可能不是零或什么的。

任何人有,为什么我只在rspec的测试得到这个未定义的方法错误的任何想法?

回答

1

的错误是在这里

visit edit_post_path(post) 

你没有告诉它什么职位是或者它指的是什么。它期望邮寄包含一些东西。

这可能是因为你的let块声明的第一个电话后发布。

+0

这是我的合法错误。感谢您的发现。我删除了那一点,但我仍然得到相同的错误。 – 2013-03-20 03:33:30

+0

好的,也许是'def correct_user?(post) post.user == current_user || current_user.admin end'节。如果你在'rails console'中测试它,这个方法是否工作?从错误消息的外观来看,它无法找到当前用户,因此跳转到||的另一侧它在一个不存在的对象上调用.admin,因此'未定义的方法'admin'为零:NilClass' – muttonlamb 2013-03-20 03:59:03

+0

愚蠢的我!测试错误是针对同一文件中的其他测试!感谢您的帮助 – 2013-03-20 05:16:47