2013-03-20 41 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