Как мне написать тесты для форм в Django? - PullRequest
97 голосов
/ 05 сентября 2011

Я бы хотел смоделировать запросы к моим представлениям в Django, когда пишу тесты.Это в основном для проверки форм.Вот фрагмент простого тестового запроса:

from django.tests import TestCase

class MyTests(TestCase):
    def test_forms(self):
        response = self.client.post("/my/form/", {'something':'something'})
        self.assertEqual(response.status_code, 200) # we get our page back with an error

Страница всегда возвращает ответ 200 независимо от того, есть ли ошибка в форме или нет.Как я могу проверить, что моя форма не прошла и что в конкретном поле (soemthing) произошла ошибка?

Ответы [ 3 ]

225 голосов
/ 05 сентября 2011

Я думаю, что если вы просто хотите протестировать форму, вам следует просто протестировать форму, а не представление, где она отображается. Пример, чтобы получить представление:

from django.test import TestCase
from myapp.forms import MyForm

class MyTests(TestCase):
    def test_forms(self):
        form_data = {'something': 'something'}
        form = MyForm(data=form_data)
        self.assertTrue(form.is_valid())
        ... # other tests relating forms, for example checking the form data
73 голосов
/ 06 сентября 2011

https://docs.djangoproject.com/en/stable/topics/testing/tools/#django.test.SimpleTestCase.assertFormError

from django.tests import TestCase

class MyTests(TestCase):
    def test_forms(self):
        response = self.client.post("/my/form/", {'something':'something'})
        self.assertFormError(response, 'form', 'something', 'This field is required.')

Где «форма» - это имя переменной контекста для вашей формы, «что-то» - это имя поля и «Это поле обязательно для заполнения».точный текст ожидаемой ошибки валидации.

12 голосов
/ 05 сентября 2011

Первоначальный ответ 2011 года был

self.assertContains(response, "Invalid message here", 1, 200)

Но теперь я вижу (2018) есть целая толпа доступных утверждений :

  • assertRaisesMessage
  • assertFieldOutput
  • assertFormError
  • assertFormsetError

Выберите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...