rspec + devise:当运行rspec时,current_user缺少属性方法

时间:2013-03-20 00:48:04

标签: ruby-on-rails rspec devise

这是为用户控制器

运行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测试期间得到这个未定义的方法错误?

1 个答案:

答案 0 :(得分:1)

错误在这里

visit edit_post_path(post)

你还没有告诉它什么是帖子或它指的是什么。它希望帖子包含一些东西。

可能是因为您的let阻止是在第一次发帖后宣布的。