0

これは、ユーザーコントローラーに対して編集メソッドが実行されるときに実行されるフィルターメソッドの1つです。

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)

あなたはそれに投稿が何であるか、それが何を指しているのかを伝えていません。投稿に何かが含まれていることを期待しています。

これはlet、最初の投稿呼び出しの後にブロックが宣言されていることが原因である可能性があります。

于 2013-03-20T00:53:51.580 に答える