Как я должен писать тесты для форм в Django?
Я хотел бы имитировать запросы к моим представлениям в 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 ответа:
Я думаю, что если вы просто хотите проверить форму, то вы должны просто проверить форму, а не вид, где форма отображается. Пример, чтобы получить представление:
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
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.')
где "форма" - это имя переменной контекста для вашей формы," что-то "- это имя поля, и " это поле является обязательным."это точный текст ожидаемой ошибки проверки.
оригинальный ответ 2011 года был
self.assertContains(response, "Invalid message here", 1, 200)
но теперь я вижу (2018) существует целая толпа применимых утверждений, доступных:
- assertRaisesMessage
- assertFieldOutput
- assertFormError
- assertFormsetError
выбирай.