0

这是为用户控制器运行编辑方法时运行的过滤器方法之一

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 可能不是 nil 什么的。

任何人都知道为什么我只在 rspec 测试期间得到这个未定义的方法错误?

4

1 回答 1

1

错误在这里

visit edit_post_path(post)

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

这可能是因为您的let块是在第一次调用 post 之后声明的。

于 2013-03-20T00:53:51.580 回答