|
@@ -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)
|