2012-12-10 4 views
0

새로운 사용자 정의 사용자 모델을 사용하여 django 1.5b에서 단위 테스트를합니다. `Django : 단위 테스트 양식 및 KeyError

def clean_email(self): 

    email = self.cleaned_data["email"] 
    try: 
     user = MyUser.objects.get(email=email) 
     raise forms.ValidationError("This email address already exists.") 
    except MyUser.DoesNotExist: 
     return email 

테스트 코드 :

def test_clean_email(self): 
    data = {'email': '[email protected]'} 
    form = MyForm(data) 
    actual = form.errors['email'] 
    expected = [u'This email address already exists.'] 
    self.assertEqual(actual, expected) 
내 사용자 정의 clean_email 방법은 새로운 사용자가 이미 존재하는 이메일에 가입하려고 ValidationError를 제기 테스트하려면, 여기에 내가 쓴 깨끗한 방법은

나는 테스트를 실행 한 후이 얻을 :

actual = form.errors['email'] 
KeyError: 'email' 
+0

MyForm hava에 email이라는 필드가 있습니까? – iMom0

답변

0

당신은 form.errors가 채워 가야 form.is_valid()를 호출해야합니다.

+0

@ iMom0 MyForm 클래스에는 실제로 이메일 필드가 있습니다.'email = forms.EmailField ( label = 'Email', initial = '이메일 주소 입력', )'@Daniel Roseman from django doc, Three 양식 처리 중 클리닝 메소드 유형이 실행됩니다. 이는 일반적으로 폼에서 is_valid() 메서드를 호출 할 때 실행됩니다. 청소 및 유효성 검증 (오류 속성에 액세스하거나 full_clean()을 직접 호출)을 트리거 할 수있는 다른 사항이 있지만 일반적으로 필요하지 않습니다. – Twissell

+0

음, 좋습니다. 먼저'form.is_valid()'를 먼저 호출해야합니다. –