Метод assertFormError
Метод assertFormError применяется к экземпляру класса TestCase
и проверяет, что при валидации переданной формы возникает ошибка
с указанным сообщением для конкретного поля. Метод часто используется
в тестах для проверки корректности работы логики валидации форм.
Он поддерживает проверку как связанных с полем ошибок, так и
общих ошибок формы, не привязанных к конкретному полю.
Синтаксис
self.assertFormError(response, form, field, errors, msg_prefix='')
Параметры метода:
response- объект ответа сервера, содержащий форму для проверки;form- имя формы в контексте шаблона (строка) или индекс формы в случае формсетов;field- имя поля, для которого проверяется ошибка, илиNoneдля проверки общих ошибок формы;errors- ожидаемое сообщение об ошибке (строка) или список сообщений;msg_prefix- необязательный префикс для сообщения об ошибке.
Пример . С валидацией обязательного поля
Допустим, у нас есть модель и форма для создания статьи.
Проверим, что при отправке пустого поля title возникает
соответствующая ошибка:
from django.test import TestCase
from django.urls import reverse
from myapp.forms import ArticleForm
class ArticleFormTest(TestCase):
def test_title_required(self):
form_data = {'title': '', 'content': 'Some content'}
form = ArticleForm(data=form_data)
self.assertFalse(form.is_valid())
self.assertFormError(form, 'title', 'This field is required.')
Результат выполнения теста:
"Test passed: form validation error detected for title field"
Пример . С проверкой формы в ответе сервера
Часто метод применяется для проверки форм, переданных в контексте ответа после POST-запроса. Рассмотрим тест для регистрации пользователя:
from django.test import TestCase
from django.urls import reverse
class RegistrationTest(TestCase):
def test_invalid_email(self):
response = self.client.post(reverse('register'), {
'username': 'john_doe',
'email': 'invalid-email',
'password1': 'testpass123',
'password2': 'testpass123',
})
self.assertFormError(
response,
'form',
'email',
'Enter a valid email address.'
)
Пример . Проверка нескольких ошибок
Метод assertFormError позволяет проверить наличие нескольких
ошибок в одном поле или разных полях формы:
from django.test import TestCase
from myapp.forms import ArticleForm
class ArticleFormTest(TestCase):
def test_multiple_errors(self):
form_data = {
'title': 'Short',
'content': '',
}
form = ArticleForm(data=form_data)
self.assertFalse(form.is_valid())
self.assertFormError(form, 'title', 'Title is too short.')
self.assertFormError(form, 'content', 'This field is required.')
Пример . Проверка общих ошибок формы
Для проверки ошибок, не привязанных к конкретному полю,
передайте None в качестве значения параметра field:
from django.test import TestCase
from django import forms
class CustomForm(forms.Form):
password = forms.CharField()
confirm = forms.CharField()
def clean(self):
cleaned_data = super().clean()
password = cleaned_data.get('password')
confirm = cleaned_data.get('confirm')
if password and confirm and password != confirm:
raise forms.ValidationError('Passwords do not match.')
return cleaned_data
class CustomFormTest(TestCase):
def test_password_mismatch(self):
form = CustomForm(data={
'password': 'secret123',
'confirm': 'secret456',
})
self.assertFalse(form.is_valid())
self.assertFormError(form, None, 'Passwords do not match.')
Смотрите также
-
метод
assertContains,
который проверяет наличие определённого содержимого в ответе -
метод
assertRedirects,
который проверяет выполнение редиректа в ответе -
метод
assertRaisesMessage,
который проверяет возникновение исключения с определённым сообщением -
класс
TestCase,
который предоставляет основу для написания тестов в Django