<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div dir="ltr"></div><div dir="ltr"><br></div><div dir="ltr"><br>Il giorno 7 ago 2019, alle ore 08:08, Karim <<a href="mailto:lemieliste@gmail.com">lemieliste@gmail.com</a>> ha scritto:<br><br></div><blockquote type="cite"><div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif">Salve lista, stavo per scrivere su telegram, ma poi mi sono detto, naah... ed eccomi qui</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">Sto cercando di capire come posso mocckare un decoratore di una view, in particolare devo decorare un metodo di una view in django</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">class MyNiceClassView:</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif"> @decorator_to_mock</div><div class="gmail_default" style="font-family:verdana,sans-serif"> def post(...):</div><div><br></div><div><div class="gmail_default" style="font-family:verdana,sans-serif">Ora, io devo testare la mia post, soltanto che il mio decoratore fa alcuni test che vorrei semplicemente evitare. Dato che python carica i moduli solo una volta, una volta che io faccio:</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">my_view = MyNiceClassView.as_view()</div><br></div><div><div class="gmail_default" style="font-family:verdana,sans-serif">la `my_view` ora e' gia' wrappata dal decoratore.</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">Cercando su stack overflow, una soluzione suggerita e' quella di </div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">1) importarsi il modulo</div><div class="gmail_default" style="font-family:verdana,sans-serif"> from app import modulo</div><div class="gmail_default" style="font-family:verdana,sans-serif">2) monkey patchare il decorator con un decorator scemo nel modulo importato</div></div><div class="gmail_default" style="font-family:verdana,sans-serif"> modulo.decoratore = decoratore_scemo</div><div><div class="gmail_default" style="font-family:verdana,sans-serif">3) importarsi la view da testare.</div><div class="gmail_default" style="font-family:verdana,sans-serif"> from app.modulo import ViewDaTestare</div><div class="gmail_default" style="font-family:verdana,sans-serif">4) testare la view</div><br></div><div><div class="gmail_default" style="font-family:verdana,sans-serif">Ora, questo processo funziona, se non fai nessuna patch e/o non carichi nulla prima della monkey patch. Inoltre se il decorator e' gia' caricato da altri test tutto va a farsi benedire perche' python importa solamente una volta.</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">Avete dei suggerimenti su come fare una bella e pulita mocckata del decorator?</div></div></div></div></blockquote><div><br></div><div><br></div>Potresti provare prima di eseguire il test a verifica re in sys.modules. Se il tuo modulo non c’è lo importi e poi fai la patch. Altrimenti fai la patch sul modulo importato. <div><br></div><div>Non so se può funzionare ma è la sola cosa che mi viene in mente quando devi alterare moduli già importati. </div><div><br></div><div>Ciao</div><div><br></div><div>G</div><div><blockquote type="cite"><div dir="ltr"><div dir="ltr"><div><br></div><div><div class="gmail_default" style="font-family:verdana,sans-serif">Ciao</div><br></div><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Karim N. Gorjux<br></div></div></div>
</div></blockquote><blockquote type="cite"><div dir="ltr"><span>_______________________________________________</span><br><span>Python mailing list</span><br><span><a href="mailto:Python@lists.python.it">Python@lists.python.it</a></span><br><span><a href="https://lists.python.it/mailman/listinfo/python">https://lists.python.it/mailman/listinfo/python</a></span><br></div></blockquote></div></body></html>