Мне нужно написать несколько тестов для пользовательских handler404 и handler500 в Django, используя django test dummy client. Первое легко проверить, пока у меня проблемы со вторым.Клиент Django test не обрабатывает исключения?
В основном проблема заключается в том, что клиентский тестовый клиент Django не обнаруживает исключения и не направляет соответствующий обработчик. Это проблема, потому что нам нужно проверить, что используются правильный пользовательский обработчик и шаблон.
У нас есть простой класс промежуточного слоя для имитации исключений для испытаний:
class HTTPStatusCodeMiddleware(object):
def process_view(self, request, *args):
if 'cookie_500_error' in request.COOKIES:
raise Exception('Test exception')
Код выше работает отлично подходит для ручного тестирования в браузере.
Теперь тесты:
def test_404_template(self):
c = Client()
url = '/not_existing.html'
response = c.get(url)
self.assertEqual(response.status_code, 404) # success
self.assertTemplateUsed(response, 'custom/404.html') # success
def test_500_template(self):
c = Client()
c.cookies['cookie_500_error'] = '1'
response = c.get('/') # here middleware raises exception!!!
self.assertEqual(response.status_code, 500)
self.assertTemplateUsed(response, 'custom/500.html')
Любая идея? У меня нет возможности использовать селен. Спасибо!
Ex actly. Вам понадобится создать фиктивный интерфейс, который вызывает SystemExit(), чтобы получить 500. Поведение, проявленное тестовым клиентом, является конструктивным, чтобы можно было проверить, что правильное исключение возбуждено на недопустимых/ошибочных входах. – bmhkim
Спасибо за ответ. В любом случае, тест, который я хочу добавить, должен проверить, что используется режим right handler500 (в зависимости от текущих настроек). Как я могу это утверждать? – BangTheBank
Затем используйте LiveServerTestCase, который запускает экземпляр реального веб-сервера (например, dev-сервер) и выполняет настоящий HTTP-запрос (self.live_server_url + reverse ('viewname')). Но вы получите визуализированную страницу, а не экземпляр HttpResponse, поэтому вам нужно будет проанализировать ее с помощью некоторой библиотеки для проверки содержимого ответа. – Bruce