2012-06-12 1 views
4

Что такое способ django для проверки ошибок проверки не в полевых условиях?django test ошибки проверки без полей

Например, поле электронной почты будет проверять, является ли введенный текст действительным адресом электронной почты, но над формой будет отображаться не-полевая ошибка, без отношения ни к одному полю. Например, он сказал бы, что этот адрес электронной почты уже зарегистрирован.

При тестировании приложений, как вы тестируете эти ошибки проверки не в поле?

Редактировать: Чтобы сделать вопрос более понятным. У меня есть специальная функция проверки, но я бы хотел проверить, что она бросает ошибки, которые предполагается использовать с помощью unittest framework, предоставленной Django.

Я мог бы вызвать функцию напрямую и протестировать ее таким образом, но это не гарантирует правильность ее использования в представлении (т. Е. Я хочу выполнить интеграционный тест).

Спасибо.

Edit: Я нашел решение о том, как тест и не Validate поле ошибки.

Это делается с помощью assertFormError. Измените имя поля на None и измените строку ошибки на список строк ошибок.

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

написать пользовательскую функцию, которая проверяет поля и вызывается вместо формы.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 

Herr clean_message будет мой пользовательский метод проверки

+0

Извините, возможно, мой вопрос был не ясен, я его обновлю. Я хочу знать, как проверить, что пользовательская проверка работает с использованием Djangos unittest framework. – 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)