⌘K
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- groups La communauté
- forum Questions
- live_tv Mentorats
Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
⌘K
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- groups La communauté
- forum Questions
- live_tv Mentorats
Formations
Articles
Communauté

La certification qualité a été délivrée pour la catégorie d'actions « Actions de formation ».
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Dans les prochaines parties, on va tester plusieurs fonctionnalités de notre modèle Product,donc on va devoir refaire souvent la même chose comme la création du produit qu'on a fait ici.
00:00:09 :Pour éviter de répéter des lignes de code, on peut utiliser une méthode qui va être lancéeavant chaque méthode de notre classe, donc à chaque méthode qu'on va faire ici.
00:00:18 :Cette méthode, c'est la méthode setup, donc il est bien important de l'écrire exactement comme ceci,puisque c'est cette méthode qui va être lancée à chaque fois qu'on va avoir une méthode de test ici.
00:00:28 :Donc si vous l'appelez autrement, elle ne sera pas détectée par les tests unitaires.Donc ce qu'on va faire, c'est tout simplement déplacer cette création de produit à l'intérieurde cette méthode setup ici, et comme ça on pourra utiliser self.product à chaque fois
00:00:41 :dans les différentes méthodes de test que l'on va créer.Donc on va garder notre méthode ici qui teste si le slug est automatiquement généré,et on va créer une autre méthode juste en dessous ici qui va nous permettrede tester l'URL absolue vers un produit.
00:00:55 :Donc l'URL absolue vers un produit, c'est ce qu'on avait créé à l'intérieur de notre modèle ici,cette méthode getAbsoluteURL, donc on va tester qu'elle retourne la bonne URL,donc je vais l'appeler tout simplement testProductAbsoluteURL,et je ne l'ai pas mentionné, mais là aussi c'est très important de commencer le nom des méthodes ici
00:01:13 :par test, puisque c'est en fait là encore cette nomenclature qui va permettre à Pythonde savoir quelle méthode il doit lancer.Si vous mettez autre chose que test, cette méthode ne sera pas considérée comme un test.
00:01:23 :Donc c'est vraiment la même logique qu'on a à chaque fois, que ce soit au niveau du fichieroù on est obligé là aussi de préfixer par le mot test, c'est exactement la même chose icià l'intérieur des méthodes.
00:01:33 :Donc qu'est-ce qu'on va tester ici ? Eh bien on va tout simplement faire un autre assertEqualpour vérifier que self.product.getAbsoluteURLest bien égal à l'URL qui redirige vers la page de produit.
00:01:45 :Donc cette URL est à l'intérieur du fichier d'URLs.py ici,c'est l'URL qui s'appelle Product à laquelle on doit envoyer un slog.Donc là il y a différentes façons de tester cette méthode,puisqu'on pourrait tester la chaîne de caractère, c'est-à-dire que ici dans notre test, on pourraitdirectement mettre une chaîne de caractère comme ceci, qui serait égale à l'URL qu'on a
00:02:05 :indiqué ici, donc Product, Slash et ensuite le slog du produit.Donc ça, ça nous permettrait de tester, de détecter un fait quand on a un changement dans l'URL,par exemple si vous souhaitez que cette URL soit toujours exactement la même et quepar exemple quelqu'un dans votre équipe ne change pas cette chaîne de caractère, puisqu'on
00:02:21 :pourrait très bien modifier la chaîne de caractère ici, mettre produit et avoirun site qui continue de fonctionner, puisque dans notre site on utilise le nom de l'URL,donc ce nom Product ici, pour rediriger vers l'URL. Donc on pourrait
00:02:33 :très bien modifier l'URL et l'appeler Produit à la place de Product et avoirun site qui en surface continue de fonctionner. Mais peut-être que de votre côté
00:02:41 :vous, vous souhaitez qu'on ne touche pas aux URL et qu'on garde les mêmesURLs à chaque fois avec Product ici, donc vous souhaitez empêcher qu'on puissemodifier cette URL. Dans ce cas-ci, il serait logique de mettre directement la chaîne
00:02:53 :de caractère avec Product, puisque votre test détecterait donc quand on aun changement directement dans l'URL ici. Si vous souhaitez par contrejuste vérifier que l'URL redirige toujours vers la page duproduit, donc comme ce qu'on a fait ici avec le Reverse, et bien vous pouvez directement utiliserReverse. Donc moi c'est ce que je vais choisir de faire, je vais copier ça ici et je vais
00:03:13 :le mettre à la place de la chaîne de caractère. Donc on va importer également Reverseavec option entrée Import This Name, et donc c'est à l'intérieur de django.urls
00:03:21 :et là on va passer à la place de self.slug, on va passerself.product.slug. Donc là ce qu'on fait c'est qu'on va reconstruire l'URL àpartir du nom de l'URL, donc ça c'est à partir de URLs ici, on avait mis leappname qui est égal à store, donc le nom de cette URL complète c'est
00:03:37 :store.product, donc la concaténation de ce nom là avec ce nom là.Donc en procédant de cette manière, je pourrais quand même modifierici cette chaîne de caractère, donc on pourrait mettre produit ou product et dansce cas-ci notre test fonctionnerait puisque là on utilise la fonction Reverse pourreconstruire l'URL à partir du nom, donc dans ce cas-ci vous voyez qu'on a un test qui est différent.
00:03:57 :On a un test qui va juste s'assurer qu'on reconstruit bien l'URL à partirdu nom de l'URL ici. Donc dans quel cas de figure est-ce que ce test ne fonctionnerait plus ?
00:04:05 :Là c'est uniquement si quelqu'un va modifier cette méthode ici et vapar exemple enlever le Quark ou mettre un autre nom ici, donc si parexemple à la place de storeProduct on va récupérer le produit icidonc le AddToCart ou n'importe quelle autre URL, là notre test ne fonctionnerait plus puisque
00:04:21 :cette méthode ici retournerait une URL et nous avec le Reverse on retournerait une autre URL.Donc j'espère que c'était assez clair, vraiment il faut juste bien comprendre queil n'y a pas une seule façon de faire les tests. Vous pouvez tester plusieurs choses, vous pouvez tester une chaîne
00:04:33 :de caractère précise, vous pouvez réutiliser des fonctions comme celle-ci pour avoir quelquechose d'un peu plus versatile et dans les deux cas de figure on ne teste pas la même chose,on teste soit la chaîne de caractère ici, soit le chemin, donc la reconstructiondu chemin vers l'URL en fonction d'un nom d'URL. Donc dans mon cas
00:04:49 :je laisse ça ici, on va vérifier que ça fonctionne, je vais juste m'assurer que j'ai pasmodifié quoi que ce soit. Ah oui il y a juste le produit ici, je vais le remettre en Product, je me disais
00:04:57 :bien aussi que j'avais modifié quelque chose. On pourrait le laisser en produit, ça ne modifieraitpas le résultat du test puisque là comme je vous ai expliqué en long, en large eten travers, on va se baser sur le nom mais je préfère garder ce productici pour avoir une cohérence avec le reste des URL. Donc on va aller tester
00:05:13 :ce test particulier, le test Product Absolute URL. Donc là vous voyezque Python vous propose dans PyCharm de lancer ce test uniquement, donc on pourraitcliquer ici sur la flèche verte et lancer ce test uniquement directement icisauf que le problème en passant par cette façon de faire, c'est que vous voyez qu'il va utiliser
00:05:29 :non pas le fichier manage.py mais directement Python avecle module unitest. Donc ça ne fonctionne pas de cette façon, vous ne pouvez pas cliquer directement
00:05:37 :ici sur la petite flèche. Ce que vous pouvez faire par contre c'est créer une configurationspécifique, donc en cliquant ici sur Edit Configuration, là vous allezvoir la configuration qu'il a faite automatiquement par défaut, donc on va la supprimeret à la place je vais faire un simple fichier Python ici, donc vous cliquez sur le
00:05:53 :plus, vous cliquez sur Python et vous allez pouvoir utiliserce fichier manage.py et ensuite spécifier ce que vous voulez lancer, donc dans ce cas-cion va utiliser la commande test et on va lui passer en argumentle nom de notre application, store.test.test-models
00:06:09 :.producttest si je me souviens bien, c'est le nom de la classeet ensuite on a testProductAbsoluteURLdonc ça fait beaucoup de choses à écrire, on a vraiment ici le chemin completdonc avec la commande test, le nom de l'application, donc l'applicationstore, le nom du dossier test, ensuite on a le fichier testModels
00:06:29 :on a la classe et ensuite la méthode qu'on souhaite lancer, donc je clique surok pour valider et on va pouvoir cette fois-ci cliquer sur la flèche pour relancer le testet là vous voyez qu'on a bien le test qui a été lancé avec la base de donnéesqui a été créée, donc la base de données pour les tests, le test qui a été
00:06:45 :lancé correctement et là on a bien ok. Je vais essayer de modifier ça ici, à la place destoreProduct on va aller chercher une autre URL, donc si je veux voir dans mon fichier d'URLon pourrait essayer à la place le addToCart et là notre test ne devrait plus fonctionner
00:06:57 :donc on va remplacer ici Product par addToCart, je relancele test et là vous voyez que le test ne fonctionne pas puisque l'URLne correspond pas, on a dans un cas ProductSnickers et ProductSnickers.string
00:07:09 :addToCart. Donc vous voyez qu'on peut également créer des fichiers comme ça de configurationlà c'est à vous de voir ce que vous préférez, là maintenant j'ai une configuration que je peux réutiliserà chaque fois et si je souhaite faire un test différent je peux le modifier ici, donc là
00:07:21 :si par exemple je souhaite lancer tous les tests à l'intérieur de ce fichier il me suffitd'enlever la classe ici et le nom de la méthode et comme çaje peux lancer tous les tests. Donc si je relance ici on va avoir les deux tests qui vont être lancés
00:07:33 :donc on a deux tests de lancés, un qui n'a pas fonctionné, failures égaleà 1, donc ça veut dire qu'on a un test qui a fonctionné et l'autre qui n'a pas fonctionné.
00:07:41 :Donc voilà pour d'autres étapes de configuration, vous pouvez passer par une configurationvous pouvez le lancer dans le terminal, ça va marcher de la même façon à chaque fois. Juste avant
00:07:49 :de terminer cette vidéo je vais vous montrer explicitement ce que je disaisdonc ce que j'expliquais au début de la vidéo. Donc là dans ce cas-ci comme on se base sur le nom
00:07:57 :je pourrais changer ici product par produit et vous allez voir que le test va continuerde fonctionner. Donc je vais juste remettre ici le product test
00:08:05 :et le test product absolute url pour lanceruniquement ce test-ci. Je valide, je clique sur la flèche pour lancer le testet là vous voyez que le test continue de fonctionner même si on a changé l'urlici. Par contre si à la place de ce que j'avais ici, donc à la place du reverse
00:08:21 :je duplique la ligne, je vais commenter celle-ci pour la garder et icià la place de tout ça on va mettre l'url complète. Donc on va concatener
00:08:29 :notre url qu'on avait à l'intérieur du urls.py, donc c'est boutiqueslash et ensuite on a produit et le nom du produit, donc leslog du produit. Donc à l'intérieur de mon test ici je vais mettre boutique
00:08:41 :slash product et ensuite on avait sneakers-dogstringcomme ceci et le slash à la fin. Donc je vais tester tout ça et dans ce cas-ciça ne devrait pas marcher puisque si je retourne ici j'ai mis produit à la place deproduct donc je relance le test. Voilà ça ne fonctionne pas, d'un côté
00:08:57 :on a slash boutique produit sneakers et de l'autre côté on a boutique product.Donc là il faudrait ici rajouter déjà le slash et ensuiteà la place de product mettre produit et là on aurait un test qui fonctionne.
00:09:09 :Donc là le test fonctionne avec cette url précise et si finalementon change ici, donc dans le fichier store.url, on change produit pourproduct, là ça ne fonctionnera plus de nouveau. Voilà donc là le test ne passe plus.
00:09:21 :Donc voilà c'était un petit peu long mais j'espère que ça vous permet bien de voir la différence entreles deux, de ce qu'on teste, est-ce qu'on teste le nom, est-ce qu'on teste l'urlabsolu, donc comme on l'a fait avec la chaîne de caractère. C'est vraiment important de
00:09:33 :comprendre ce que vous faites puisque je vois beaucoup de gens qui font des tests et qui suivent des formationssans vraiment se demander ce qu'ils testent, ils se disent juste bon bah là dans ce cas-ci je vais tester l'urldonc je vais mettre le nom de l'url ou je vais mettre la chaîne de caractère et vous voyez