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
3 Réponses :
Lorsque vous exécutez des tests débogage code > est défini sur
par le cadre de test Django. p> false code> explicitement
Merci. C'est bizarre que même le revenant à vrai moi-même dans le test ne semble pas changer quoi que ce soit.
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
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 () code> 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?
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')
J'ai pu faire le test de test. Voir ma réponse.