Test unitaire assertIn après self.client.post
Bonsoir,
J'ai réussi à créer un test unitaire.
Mais je bloque sur mon deuxième.
Code :
class StoreLoggedInTest(TestCase):
def setUp(self):
self.user = Shopper.objects.create_user(
email="[email protected]",
first_name="Patrick",
last_name="smith",
password="123456789"
)
def test_profile_not_change_because_wrong_password(self):
self.client.login(
email="[email protected]",
password="123456789"
)
data = {
"email": "[email protected]",
"password": "1234567",
"first_name": "Patrick",
"last_name": "Martin"
}
resp = self.client.post(reverse("accounts:profil"), data=data)
Je test le cas où dans un formulaire je mets un mauvais mot de passe.
Dans ma vue j'affiche une erreur :
messages.add_message(request, messages.ERROR, "le mot de passe n'est pas valide.")
Mais je n'arrive pas à tester l'affichage de cette erreur.
Je ne trouve pas le bon assert à utiliser à la fin de def test_profile_not_change_because_wrong_password(self)
Un indice svp ? lol
Merci d'avance
Hello Gab et désolé pour le délai de réponse !
Tu peux utiliser la méthode get_messages du module django.contrib.messages pour récupérer les messages de ta réponse :
from django.contrib.messages import get_messages
def test_profile_not_change_because_wrong_password(self):
self.client.login(
email="[email protected]",
password="123456789"
)
data = {
"email": "[email protected]",
"password": "1234567",
"first_name": "Patrick",
"last_name": "Smith"
}
resp = self.client.post(reverse("accounts:profil"), data=data)
# Tu récupères les messages de ta réponse :
messages_list = list(get_messages(resp.wsgi_request))
# On vérifie si le message est là
expected_error_message = "le mot de passe n'est pas valide."
# J'utilise any, qui permet de vérifie si au moins un booléen True est présent dans le générateur.
self.assertTrue(any(str(message) == expected_error_message for message in messages_list))
Pour récupérer les messages, tu passes resp.wsgi_request à get_messages. le self.client te retourne la réponse Http et wsgi_request est un attribut qui te permet d'accéder à la requête (comme le request dans une vue).
Et la fonction get_messages prend en argument un attribut qui correspond à ta requête et te retourne la liste de messages.
Du coup avec tout ça, tu peux vérifier que ton message d'erreur est bien présent dans la liste (ce qu'on fait avec le any : tu peux regarder cette vidéo pour en apprendre plus sur any et all).
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte