2

アクションの前にログインを要求するように、アプリ内のいくつかのコントローラーを制限しようとしています。私はそれを実装する方法を知っていますが、rspec で適切なテストを記述する方法は知りません。

たとえば、ユーザー コントローラーのすべてのアクションでログインが必要になるように制限したい場合は、次のようなテストを行うことができます。

「承認」を記述します

describe "for non-signed-in users" do
  let(:user) { FactoryGirl.create(:user) }

  describe "in the Users controller" do

    describe "visiting the index page" do
      before { visit users_path }
      it { should have_selector('title', text: 'Log In') }
    end

    describe "visiting the edit page" do
      before { visit edit_user_path(user) }
      it { should have_selector('title', text: 'Log In') }
    end

    describe "submitting to the update action" do
      before { put user_path(user) }
      specify { response.should redirect_to(login_path) }
    end

     describe "submitting a DELETE request to the Users#destroy action" do
      before { delete user_path(user) }
      specify { response.should redirect_to(root_path) }        
    end

....etc.....

  end
end

テストするコントローラーごとに、7 つの安静ルートすべてを指定する必要がありますか? かなり効率が悪いようです。「ユーザールートにアクセスする前に、応答をlogin_pathにリダイレクトする必要があります」と言う方法はありますか?

4

1 に答える 1