2011-01-28 2 views
11

장고 응용 프로그램의 단위 테스트를 작성하고 있습니다. 그러나 뷰의 HTML 출력을 테스트하는 방법을 모르겠습니다.Django 뷰의 HTML 출력을 (unittest를 사용하여) 테스트하는 방법은 무엇입니까?

경우에 따라 특정 요소에 특정 값이 포함되어 있는지 또는 표시되는 요소의 수 또는 그러한 요소가 있는지 확인할 수 있습니다. 어떻게 그런 테스트를 할 수 있습니까?

나는 unittest과 django 자신의 django.test을 사용하는 솔루션을 원합니다.

Selenium 또는 Pyccuracy (셀렌을 사용함)을 사용할 수 있지만 브라우저 실행에 따른 막대한 오버 헤드로 인해 셀렌 테스트가 매우 느리다는 것을 알고 있습니다. 또한 단위 테스트는 django-coverage 패키지와 함께 즉시 사용할 수 있습니다.

답변

8

이 다른 답변이 주장에 대한 오래된 지금. 어설 션 assertHTMLEqual (Django 1.4 이후)은 공백을 무시하고 속성의 순서를 무시하는 등의 작업을 처리합니다.

+0

이 게시물의 링크 404 – surfer190

+1

고마워요 - 고마워요. –

8

나는 항상 BeautifulSoup의 조합을 발견했으며, assertContains와 assertFormError는 TestCase's available assertions에서 트릭을 수행했습니다.

+1

또는 BeautifulSoup 대신 [lxml] (http://lxml.de/)을 사용하십시오. 어쨌든, 3 개의 인수를받는 assertElementContains를 작성하는 것은 쉽습니다 : 응답 본문, CSS 선택 자 및 문자열. –

5

장고의 테스트 프레임 워크는 이상적입니다.

  1. 상태 코드 및 내용을 확인하십시오. http://docs.djangoproject.com/en/1.2/topics/testing/#django.test.TestCase.assertContains

  2. 템플릿을 확인하십시오. http://docs.djangoproject.com/en/1.2/topics/testing/#django.test.TestCase.assertTemplateUsed

또한, 쉽게 때 단위 테스트 물건을 찾을 수 있도록하기 위해 HTML 내에서 id="something" 태그를 사용하는 데 도움이됩니다. 이런 테스트가 있습니다.

def should_find_something(self): 
    response= self.client.get("/path/to/resource/pk/") 
    self.assertContains(response, '<td id="pk">the pk string</td>', status_code=200) 
    self.assertTemplateUsed(response, 'appropriate_page.html') 

잘 작동합니다.

+4

공백 변경시에도 테스트가 중단되므로 "포함"을 확인하고 싶지 않습니다. 또한, 필자는 엘리먼트를 매치시키기 위해 추악한 읽을 수없는 정규식을 쓰고 싶지 않습니다. –

+0

트릭은 테스트중인 부분의 공백을 피하는 것입니다. 어느 것이 매우 피하기 매우 쉽습니다. 예를 들어, 내용은입니다. 일부 경우에는 도움이됩니다. –

+0

아니에요. 당신이하려는 일에 많은 영향을받습니다. 때로는 공백을 피하는 것이 쉽지 않거나 불가능합니다. –

관련 문제