8
votes

Comment se fait-il que les questions ne soient pas ajoutées à Django's dB.Connection.Queries dans des tests?

J'essaie de capturer les requêtes que mon code soumet à la base de données en examinant le contenu de django.db.connection.Quiseries code>. Pour une raison quelconque, une fois que toutes les requêtes de configuration automatiquement produites sont enregistrées, aucune autre requête n'est enregistrée à partir de mon propre code. Le cas de test suivant démontre le comportement.

Traceback (most recent call last):
  File "/Users/jacob/foo/bar_project/baz_application/tests.py", line 246, in test1
    self.assert_(connection.queries)
AssertionError: No queries


1 commentaires

J'ai pu faire le test de test. Voir ma réponse.


3 Réponses :


5
votes

Lorsque vous exécutez des tests débogage est défini sur false explicitement par le cadre de test Django.


1 commentaires

Merci. C'est bizarre que même le revenant à vrai moi-même dans le test ne semble pas changer quoi que ce soit.



8
votes

Vous devez définir explicitement débogage code>. Par exemple, voir la section d'utilisation des échantillons pour Ces tests dans le Django Documentation:

# Set up.
# The test runner sets settings.DEBUG to False, but we want to gather queries
# so we'll set it to True here and reset it at the end of the test suite.
>>> from django.conf import settings
>>> settings.DEBUG = True


3 commentaires

Déjà fait ça, merci. Il existe environ 5000 états SQL de la configuration de la DB de test qui sont effacées par le Reset_Quiseries () appel. Toute autre idée?


Oh, tu veux dire dans le test lui-même ??


Merci pour la suggestion. Il ne semblait pas changer quoi que ce soit, malheureusement, par ma mise à jour. Toute autre idée?



5
votes

Vous ne verrez aucune question après avoir exécuté user.Object.all () code>. Ceci est seulement à prévoir. La raison? Les querySets sont paresseux em>. Sauf si vous faites quelque chose avec le query, aucune requête ne sera déclenchée. Pour vérifier cette hypothèse, essayez ce qui suit et voyez si le test passe.

class Test1(TestCase):
    def setUp(self):
        settings.DEBUG = True

    def test1(self):
        self.assert_(settings.DEBUG, 'DEBUG is False')
        reset_queries() #clears out all the setup queries
        print User.objects.all() # <============= Printing the queryset.
        self.assert_(connection.queries, 'No queries')


0 commentaires