python - personalizados - model forms django
¿Cómo debo escribir pruebas para formularios en Django? (3)
Me gustaría simular las solicitudes a mis puntos de vista en Django cuando estoy escribiendo pruebas. Esto es principalmente para probar los formularios. Aquí hay un fragmento de una solicitud de prueba simple:
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
La página siempre devuelve una respuesta de 200 si hay un error en el formulario o no. ¿Cómo puedo verificar que mi formulario falló y que el campo en particular ( soemthing
) tuvo un error?
Creo que si solo quiere probar el formulario, simplemente debe probar el formulario y no la vista donde se representa el formulario. Ejemplo para tener una idea:
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
La respuesta original de 2011 fue
self.assertContains(response, "Invalid message here", 1, 200)
Pero ahora veo (2018) que hay una gran cantidad de afirmaciones aplicables disponibles :
- assertRaisesMessage
- assertFieldOutput
- assertFormError
- assertFormsetError
Elige tu opción.
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.'')
Donde "formulario" es el nombre de la variable de contexto para su formulario, "algo" es el nombre del campo y "Este campo es obligatorio". es el texto exacto del error de validación esperado.