2014-09-19 1 views
4

대부분의 경우 기본 양식 저장/정리 방법을 변경/연장해야합니다. 그러나 사용자 지정 저장/정리 방법을 테스트하는 방법을 잘 모르겠습니다.Django 사용자 정의 폼을 테스트/정리하는 방법은 무엇입니까?

대부분의 시간을 내 테스트 등이있다 : 응답을 캡처, 장고의 TestCase 클래스에서 self.client.post를 사용

response = self.client.post(reverse('example:view_name'), kwargs={'example, self.example'}) 
self.assertEqual(200, response.status_code) 
self.assertTemplateUsed('example.html', response) 

는 충분하지 않다 확실히/테스트 사용자가 저장 적용되지 않으며, 깨끗한.

양식 테스트의 실습은 무엇입니까? 필자가 생각한 바에 따르면, 위에서 한 것은 잘못된 것인데, 폼에 도달하기 위해 통합 테스트가 더 필요하기 때문입니다.

+0

테스트 할 무엇? 결과가 예상 한 결과인지 확인할 수 있습니다 (즉 올바른 데이터를 저장하고 있음). – danielfranca

답변

3

테스트에서 직접 양식을 만들고 is_valid method (cleanis_valid이 호출 됨)을 호출하십시오. 그것이 올바르게 검증되는지 확인하십시오. save 메소드와 동일합니다. 예를 들어

:

(코드는 장고 소스 코드에서 온 위 - django/contrib/auth/tests/test_forms.py)
from django.contrib.auth.forms import (UserCreationForm, ...) 

... 

class UserCreationFormTest(TestCase): 

    def test_user_already_exists(self): 
     data = { 
      'username': 'testclient', 
      'password1': 'test123', 
      'password2': 'test123', 
     } 
     form = UserCreationForm(data) 
     self.assertFalse(form.is_valid()) 
     self.assertEqual(
      form["username"].errors, 
      [force_text(User._meta.get_field('username').error_messages['unique'])]) 

.


BTW, assertTemplateUsed에 대한 매개 변수는 response, template_name, ...하지 template_name, response, .... 있습니다.

질문에 코드의 마지막 행은 다음과 같습니다

self.assertTemplateUsed(response, 'example.html') 
+0

감사! 따라서 유일한 방법은 is_valid :/ –

+0

을 통해 진행하는 것입니다. 사용자 정의 유효성 검사 작업을 확인하고 싶지만 정상적인 유효성 검사를 거치지 않아도됩니다. 커스텀 save 메소드를 가지고 있다면 그것을 테스트 할 필요가있을 것이다 :'result = form.save()'를 사용하고, save 메소드에서 어떤 일이 일어나는지 체크해야한다. –

관련 문제