tests.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import sys
  2. from django.test import TestCase
  3. from django.core.signals import got_request_exception
  4. class RequestMiddleware(object):
  5. def process_request(self, request):
  6. raise Exception('Exception')
  7. class MiddlewareExceptionTest(TestCase):
  8. def setUp(self):
  9. self.exceptions = []
  10. got_request_exception.connect(self._on_request_exception)
  11. self.client.handler.load_middleware()
  12. def tearDown(self):
  13. got_request_exception.disconnect(self._on_request_exception)
  14. self.exceptions = []
  15. def _on_request_exception(self, sender, request, **kwargs):
  16. self.exceptions.append(sys.exc_info())
  17. def test_process_request(self):
  18. self.client.handler._request_middleware.insert(0, RequestMiddleware().process_request)
  19. try:
  20. response = self.client.get('/')
  21. except:
  22. # Test client indefinitely re-raises any exceptions being raised
  23. # during request handling. Hence actual testing that exception was
  24. # properly handled is done by relying on got_request_exception
  25. # signal being sent.
  26. pass
  27. self.assertEquals(len(self.exceptions), 1)
  28. exception, value, tb = self.exceptions[0]
  29. self.assertEquals(value.args, ('Exception', ))