Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2021-11-30T14:44:31+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Tests Django : vérifier un texte brut ou associé à l’objet testé ?, message #2392572021-11-30T14:44:31+01:00Aabu/@Aabuhttps://zestedesavoir.com/forums/sujet/15880/tests-django-verifier-un-texte-brut-ou-associe-a-lobjet-teste/?page=1#p239257<p>Les <em>Factory</em>, ce n’est pas quelque chose fournit spécifiquement par Django. Le projet technique ZdS utilise <a href="https://github.com/FactoryBoy/factory_boy">FactoryBoy</a>.</p>
<p>Une fois ta <em>Factory</em> écrite, cela facilite beaucoup la création d’instances de modèles à la volée pour les tests. Si tu veux une entreprise, tu fais <code>EntrepriseFactory()</code> et hop, tu as ce qu’il te faut. C’est aussi possible d’imaginer des choses plus complexes : rajouter des paramètres pour spécifier un nombre d’adresses par exemple. Il y a pas mal d’exemples dans le code de ZdS si tu veux jeter un œil (cherche du côté des fichiers <code>factories.py</code>).</p>Tests Django : vérifier un texte brut ou associé à l’objet testé ?, message #2392562021-11-30T14:28:09+01:00Moté/@Mot%C3%A9https://zestedesavoir.com/forums/sujet/15880/tests-django-verifier-un-texte-brut-ou-associe-a-lobjet-teste/?page=1#p239256<p>J’ai aussi vu ça, mais je me suis rappelé d’un truc dans le code de ZdS qui me faisait plutôt penser au package que j’ai linké. Qui est effectivement daté de 2013 et python 2.6, à éviter du coup <img src="/static/smileys/svg/heureux.svg" alt=":D" class="smiley"></p>Tests Django : vérifier un texte brut ou associé à l’objet testé ?, message #2392552021-11-30T14:23:32+01:00Ge0/@Ge0https://zestedesavoir.com/forums/sujet/15880/tests-django-verifier-un-texte-brut-ou-associe-a-lobjet-teste/?page=1#p239255<blockquote>
<p>Je me dis aussi que si l’application n’enregistre pas comme il faut l’adresse, alors c’est à un autre test de le fair remarquer, non ?</p>
</blockquote>
<p>Si c’est quelque chose d’absolument critique, ça justifie un autre test. Si ça ne l’est pas, pas besoin de se prendre la tête, je pense.</p>
<p>Au passage, moi non plus je ne connaissais pas l’existence des <code>Factory</code> et bien que j’utilise Django depuis un petit moment, je n’en ai jamais entendu parler.</p>
<p>Ce que j’ai trouvé de meilleur dans la doc c’est ici : <a href="https://docs.djangoproject.com/en/3.2/topics/testing/advanced/">https://docs.djangoproject.com/en/3.2/topics/testing/advanced/</a></p>Tests Django : vérifier un texte brut ou associé à l’objet testé ?, message #2392542021-11-30T14:22:54+01:00Moté/@Mot%C3%A9https://zestedesavoir.com/forums/sujet/15880/tests-django-verifier-un-texte-brut-ou-associe-a-lobjet-teste/?page=1#p239254<p>Pour être sûr, est-ce que tu parlais bien de <a href="https://pypi.org/project/django_factory/">ce package</a> <a href="/@Aabu" rel="nofollow" class="ping ping-link">@<span class="ping-username">Aabu</span></a> ?</p>Tests Django : vérifier un texte brut ou associé à l’objet testé ?, message #2392482021-11-30T08:16:38+01:00Moté/@Mot%C3%A9https://zestedesavoir.com/forums/sujet/15880/tests-django-verifier-un-texte-brut-ou-associe-a-lobjet-teste/?page=1#p239248<p>Salut,</p>
<p>Merci, c’est aussi ce que je pensais du coup. Y a quelques éléments que j’ai dû garder en texte brut, les géolocalisations, parce qu’elles passent par un formattage à un moment donné dans le rendu, mais c’est tout.</p>
<p>Je n’ai pas bien compris ce que tu as dit sur les Factory, mais je pense qu’il faut juste que j’aille voir la doc ,je ne sais pas bien ce que sont les Factory.</p>Tests Django : vérifier un texte brut ou associé à l’objet testé ?, message #2392422021-11-29T23:05:22+01:00Aabu/@Aabuhttps://zestedesavoir.com/forums/sujet/15880/tests-django-verifier-un-texte-brut-ou-associe-a-lobjet-teste/?page=1#p239242<p>Salut,</p>
<p>Je te conseille d’éviter à tout prix la seconde version. La première version me paraît adéquate.</p>
<p>En fait, on revient toujours à savoir précisément ce que tu veux tester. Ici, ça semble être que le rendu de la vue affiche bien une adresse donnée déjà contenue en base de donnée, auquel cas vérifier que l’enregistrement est correct à assez peu de sens. Avec le code actuel de <code>setUp</code>, si tu testes que c’est bien enregistré, tu vas essentiellement tester que les modèles de Django fonctionnent correctement, mais ce n’est pas à toi de tester leur code.</p>
<p>Si tu ressens le besoin de tester ton code de test parce que tu n’es pas convaincu qu’il va effectivement mettre en place la situation que tu veux tester, c’est signe qu’il faut probablement simplifier tout ça, avec par exemple des <code>Factory</code>.</p>Tests Django : vérifier un texte brut ou associé à l’objet testé ?, message #2392412021-11-29T22:07:41+01:00Moté/@Mot%C3%A9https://zestedesavoir.com/forums/sujet/15880/tests-django-verifier-un-texte-brut-ou-associe-a-lobjet-teste/?page=1#p239241<p>Hello,</p>
<p>Je me doute que mon titre n’est pas très clair, mais je ne savais pas comment rester assez court sinon.</p>
<p>Mon soucis est relativement simple. Je fais des tests pour vérifier qu’une view ressort bien les bonnes informations. La view d’une enterprise doit afficher toutes ses adresses par exemple. Donc, dans le setup de mon test, je crée l’entreprise, et j’associe ses adresses. Dans le test en lui-même, dois-je vérifier la présence de l’adresse en tant que format brut, ou dois-je plutôt véréfier la présence de l’adresse liée à l’objet ?</p>
<p>Avec les exemples, ce sera plus clair :</p>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span><span data-count="23"></span></div><pre><code class="hljs language-py"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">EnterpriseViewAdressesTestCase</span>(<span class="hljs-params">TestCase</span>):</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setUp</span>(<span class="hljs-params">self</span>) -> <span class="hljs-literal">None</span>:</span>
self.one_address = models.Enterprise(name=<span class="hljs-string">"Enterprise 1"</span>)
self.one_address.save()
self.url_one_address = reverse(ENTERPRISE_VIEW, args=[self.one_address.pk])
self.one_address_address = models.Address(
enterprise=self.one_address,
text_version=<span class="hljs-string">"address 1 of one_address"</span>,
geolocation=Point([<span class="hljs-number">10</span>, <span class="hljs-number">10</span>]),
is_production=<span class="hljs-literal">False</span>,
)
<span class="hljs-comment"># On teste l’adresse reliée directement à l’objet Adresse</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test_returns_one_address_text_version</span>(<span class="hljs-params">self</span>) -> <span class="hljs-literal">None</span>:</span>
response = self.client.get(self.url_one_address)
self.assertContains(response, self.one_address_address.text_version)
<span class="hljs-comment"># Ou alors on teste l’adresse en texte brut ?</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test_returns_one_address_text_version</span>(<span class="hljs-params">self</span>) -> <span class="hljs-literal">None</span>:</span>
response = self.client.get(self.url_one_address)
self.assertContains(response, <span class="hljs-string">"address 1 of one_address"</span>)
</code></pre></div>
<p>J’ai pour l’instant utilisé la première version, qui me semble un poil plus propre et plus évolutive. Je me dis aussi que si l’application n’enregistre pas comme il faut l’adresse, alors c’est à un autre test de le fair remarquer, non ?</p>
<p>Voilà, c’est la ma question, c’est un peu tout con, mais je voulais être sûr, merci <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"></p>