РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
764 of 818 menu

Метод 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
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить