J'aimerais simuler des requêtes sur mes vues dans Django lorsque je rédige des tests. Il s'agit principalement de tester les formulaires. Voici un extrait d'une simple requête de test:
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
) contenait une erreur?
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.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.')
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.
La réponse originale de 2011 était
self.assertContains(response, "Invalid message here", 1, 200)
Mais je vois maintenant (2018) il y a toute une foule d'affirmations applicables disponibles :
Faites votre choix.