django 테스트 더미 클라이언트를 사용하여 장고에 custom handler404 및 handler500에 대한 몇 가지 테스트를 작성해야합니다. 첫 번째 문제는 두 번째 문제가있는 동안 테스트하기 쉽습니다.장고 테스트 클라이언트가 예외를 처리하지 않습니까?
기본적으로 문제는 Django 테스트 클라이언트가 예외를 catch하지 않으며 적절한 처리기로 라우팅하지 않는다는 것입니다. 올바른 사용자 지정 처리기 및 템플릿이 사용되는지 테스트해야하기 때문에이 문제가 발생합니다.
우리는 테스트를 위해 예외를 시뮬레이션하는 간단한 미들웨어 클래스가 :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')
어떤 생각? 셀렌을 사용할 수있는 옵션이 없습니다. 감사합니다.
전 행동하라. 500을 얻기 위해 SystemExit()을 발생시키는 더미 인터페이스를 생성 할 수 있습니다. 테스트 클라이언트가 나타내는 동작은 잘못되었거나 잘못된 입력에 대해 올바른 예외가 발생했는지 확인하기위한 것입니다. – bmhkim
답해 주셔서 감사합니다. 어쨌든 실제로 추가하려는 테스트는 현재 설정에 따라 실제로 올바른 handler500 뷰가 사용되고 있는지 확인해야합니다. 내가 어떻게 주장 할 수 있니? – BangTheBank
그런 다음 실제 서버 인스턴스 (예 : dev 서버)를 실행하고 실제 http 요청 (self.live_server_url + reverse ('viewname'))을 수행하는 LiveServerTestCase를 사용합니다. 그러나 HttpResponse 인스턴스가 아닌 렌더링 된 페이지를 얻을 수 있으므로 응답 콘텐트를 테스트하기 위해 라이브러리로 파싱해야한다. – Bruce