这是为用户控制器
运行edit方法时运行的过滤方法之一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测试期间得到这个未定义的方法错误?
答案 0 :(得分:1)
错误在这里
visit edit_post_path(post)
你还没有告诉它什么是帖子或它指的是什么。它希望帖子包含一些东西。
可能是因为您的let
阻止是在第一次发帖后宣布的。