アイデアは、管理者ユーザーが自分自身を破壊できないようにすることです。私は次のテストを書きました:
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]}.
テンプレートが見つからないというエラー メッセージがわかりません。また、テストに合格しない理由もわかりません。