diff --git a/docs/topics/http/views.txt b/docs/topics/http/views.txt index 3c7c5e5018..baacd233b5 100644 --- a/docs/topics/http/views.txt +++ b/docs/topics/http/views.txt @@ -166,3 +166,39 @@ The :func:`~django.views.defaults.bad_request` view is overridden by Use the :setting:`CSRF_FAILURE_VIEW` setting to override the CSRF error view. + +Testing custom error views +-------------------------- + +To test the response of a custom error handler, raise the appropriate exception +in a test view. For example:: + + from django.core.exceptions import PermissionDenied + from django.http import HttpResponse + from django.test import SimpleTestCase, override_settings + from django.urls import path + + + def response_error_handler(request, exception=None): + return HttpResponse('Error handler content', status=403) + + + def permission_denied_view(request): + raise PermissionDenied + + + urlpatterns = [ + path('403/', permission_denied_view), + ] + + handler403 = response_error_handler + + + # ROOT_URLCONF must specify the module that contains handler403 = ... + @override_settings(ROOT_URLCONF=__name__) + class CustomErrorHandlerTests(SimpleTestCase): + + def test_handler_renders_template_response(self): + response = self.client.get('/403/') + # Make assertions on the response here. For example: + self.assertContains(response, 'Error handler content', status_code=403)