2

アイデアは、管理者ユーザーが自分自身を破壊できないようにすることです。私は次のテストを書きました:

describe "as admin user" do
  let(:admin) { FactoryGirl.create(:admin) }
  before { valid_signin admin }

  describe "should not be able to delete himself by submitting a DELETE request to the Users#destroy action" do
    specify do
      expect { delete user_path(admin) }.not_to change(User, :count).by(-1)
    end
  end
end

そして、破壊アクションを次のように変更しました。

def destroy
  @user = User.find(params[:id])
  unless current_user?(@user)
    User.find(params[:id]).destroy
    flash[:success] = "User destroyed."
    redirect_to users_url
  end
end

(管理者ユーザーの場合のみ、破棄アクションにアクセスできます)。

テストはパスするはずですが、パスしません。次のエラー メッセージが表示されます。

Failure/Error: expect { delete user_path(admin) }.not_to change(User, :count).by(-1)
     ActionView::MissingTemplate:
       Missing template users/destroy, application/destroy with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}.

テンプレートが見つからないというエラー メッセージがわかりません。また、テストに合格しない理由もわかりません。

4

1 に答える 1