2012-06-12 2 views
4

필드가 아닌 유효성 검사 오류를 테스트하는 장고 방법은 무엇입니까?django 테스트 비 필드 유효성 검사 오류

예를 들어 전자 메일 필드는 입력 한 텍스트가 유효한 전자 메일 주소인지 테스트하지만 필드가 아닌 오류는 양식 위에 하나의 필드와 관계없이 표시됩니다. 예를 들어 이메일 주소가 이미 등록되어 있다고 가정합니다.

응용 프로그램을 테스트 할 때 이러한 비 필드 유효성 검사 오류를 어떻게 테스트합니까?

편집 : 질문을 명확하게 작성하십시오. 사용자 정의 유효성 검사 함수가 있지만 장고가 제공 한 unittest 프레임 워크를 사용하여 오류가 발생했는지 테스트하고 싶습니다.

함수를 직접 호출하여 테스트 할 수는 있지만 뷰에서 올바르게 사용되는지는 확인할 수 없습니다 (예 : 통합 테스트를 수행하려고합니다).

감사합니다.

편집 : 내가 어떻게 테스트을하지 유효성을 필드 오류와 해결책을 발견했다.

assertFormError로 끝났습니다. 필드 이름을 없음으로 변경하고 오류 문자열을 오류 문자열 목록으로 변경하십시오.

self.assertFormError(response, 'form', 'field name', 'error') # Test single field error 
self.assertFormError(response, 'form', None, ['Error #1.', 'Error #2']) # Test general form errors 
+1

이 질문에 ** 수정 **이 허용 된 답변이어야합니다. –

답변

0

필드의 유효성을 검사하고 form.is_valid() 대신이를 호출하는 사용자 지정 함수를 작성하십시오.

Django docs는 이에 대한 설명이 잘못되었습니다. 아래 링크를 확인하십시오. 예를 들어

https://docs.djangoproject.com/en/dev/ref/forms/validation/#form-field-default-cleaning

: 장고 수입 형태의

class ContactForm(forms.Form): 
    subject = forms.CharField(max_length=100) 
    email = forms.EmailField(required=False) 
    message = forms.CharField(widget=forms.Textarea) 

def clean_message(self): 
    message = self.cleaned_data['message'] 
    num_words = len(message.split()) 
    if num_words < 4: 
     raise forms.ValidationError("Not enough words!") 
    return message 

헤르의 clean_message은 비록 그냥 올바른 답을 갖는 위해서

+0

죄송합니다. 질문이 명확하지 않을 수 있습니다. 업데이트 드리겠습니다. Djangos unittest 프레임 워크를 사용하여 사용자 정의 유효성 검사가 작동하는지 테스트하는 방법을 알고 싶습니다. – OpCodeOmega

+0

게시하기 전에 질문을 명확히하십시오 .... –

2

, 내 사용자 지정 유효성 검사 방법이 될 것입니다 이미 질문 자체에 답을 게시 할 것입니다.

assertFormError()을 사용하여 오류가 있는지 폼을 테스트 할 수 있습니다.

폼의 필드가 폼에 렌더링 될 때 제공된 오류 목록을 발생 시킨다는 것을 나타냅니다.

양식 이름은 확인을 위해 사용중인 실제 양식이 아닌 context 양식의 이름이어야합니다.

non_field_errors에 대한 (모든 분야에 관련이없는 일반적인 오류) 다음과 같이 사용할 수 있습니다 :

self.assertFormError(response, 'form', None, 'Some error') 
을 다음과 같이 특정 분야의 오류를 테스트 할 수

: 당신은 또한 수

self.assertFormError(response, 'form', 'field_name', 'Some error') 

을 테스트 할 오류 튜플을 전달하십시오.

errors = ['some error 1', 'some error 2'] 
self.assertFormError(response, 'form', 'field_name', errors)