114 votes

Écrire des tests pour les formulaires dans Django

J'aimerais simuler des requêtes pour mes vues dans Django lorsque je rédige des tests. C'est principalement pour tester les formulaires. Voici un extrait d'une demande de test 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 page renvoie toujours une réponse de 200, qu'il y ait une erreur de formulaire ou non. Comment puis-je vérifier que mon formulaire a échoué et que le champ particulier ( soemthing ) comportait une erreur?

Merci

261voto

Je pense que si vous voulez juste tester le formulaire, vous devriez alors tester le formulaire et non la vue où le formulaire est rendu. Exemple pour avoir une idée:

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

class MyTests(TestCase):
    def test_forms(self):
        form_data = {'something': 'something'}
        form = MyForm(data=form_data)
        self.assertEqual(form.is_valid(), True)
        ... # other tests relating forms, for example checking the form data
 

81voto

Shane Points 426

https://docs.djangoproject.com/en/dev/topics/testing/overview/#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.')
 

Où "formulaire" est le nom de la variable de contexte de votre formulaire, "quelque chose" est le nom du champ et "Ce champ est obligatoire". est le texte exact de l'erreur de validation attendue.

19voto

John Mee Points 12004
self.assertContains(response, "Invalid message here", 1, 200)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X