2009-12-19 3 views
7

Je ne peux pas accéder à l'attribut context d'un objet HttpResponse de ipython. Mais le test unitaire accède à context.Django: Le contexte du client de test est vide à partir du shell

Voici le test unitaire. Le test passe correctement:

from django.test import Client, TestCase 
from django.core import mail 

class ClientTest(TestCase): 
    def test_get_view(self): 
     data = {'var': u'\xf2'} 
     response = self.client.get('/test04/', data) 

     # Check some response details 
     self.assertContains(response, 'This is a test') 
     self.assertEqual(response.context['var'], u'\xf2') 

est le code ici que j'ai utilisé dans la coquille:

In [10]: from django.test import Client 

In [11]: c = Client() 

In [12]: r = c.get('/test04/', data) 

In [13]: r.context 

In [14]: type(r.context) 
Out[14]: <type 'NoneType'> 

response.context est pas dans la coquille alors response.context existe dans le test unitaire.

Pourquoi HttpResponse se comporte-t-il de manière incohérente entre le test de coque et le test unitaire?

+0

J'ai essayé cela moi-même et ni le contexte ni le modèle ne sont définis dans le shell Django. Je suppose que Client n'est pas destiné à être utilisé dans un shell interactif. Le lanceur de test fait de l'instrumentation avant d'exécuter des tests, qui ne seront pas déclenchés via shell. Voir 'django.test.testcases' – muhuk

Répondre

6

Vous pouvez voir dans le code de test Django où il monkeypatches dans l'instrumentation spéciale à make template rendering send a signal, que le test client listens to de sorte qu'il peut annotate the response object with the rendered templates and their contexts. Pour que ce signal soit attaché, vous devez soit appeler la fonction django.test.utils.setup_test_environment() dans votre session de shell (qui a d'autres effets secondaires), ou dupliquer seulement les lignes qui rendent le rendu du template monkeypatch . Pas trop dur, mais je suis d'accord que ce serait bien si cet aspect de débogage particulier pouvait être refactorisé pour le rendre plus facile à utiliser en dehors des tests. Personnellement, cela ne me dérangerait pas si cette information était toujours collectée lorsque DEBUG est True, et pas seulement en test.

Questions connexes