/ / Django: Test kontext klienta je prázdny z shellu - django, unit-testovanie, testovanie

Django: Kontext testovacieho klienta je prázdny z shell - django, testovanie jednotiek, testovanie

Nemôžem pristupovať k context atribútu HttpResponse objekt z ipython. Ale jednotka testuje prístup context.

Tu je test jednotky. Testovací chod prebehol správne:

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")

Tu je kód, ktorý som použil v shell:

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 nie je v škrupine, zatiaľ čo response.context existuje v jednotkovom teste.

Prečo HttpResponse správať sa nekonzistentne medzi testom shell a jednotkou?

odpovede:

7 pre odpoveď č. 1

V testovacom kóde Django môžete vidieť, kde sa v špeciálnom prístrojovom vybavení nachádza aby šablóna renderovala odoslanie signálu, ktoré test klient počúva tak to môže anotujte objekt odpovede pomocou renderovaných šablón a ich kontextov.

Aby bol tento signál pripojený, musíte „dbuď zavolajte funkciu django.test.utils.setup_test_environment () vo vašej relácii shell (ktorá má iné vedľajšie účinky), alebo duplikujte len riadky, ktoré vykreslenie šablóny monkeypatch. Nie je to príliš ťažké, ale súhlasím s tým, že „d by bolo pekné, keby tento konkrétny aspekt ladenia mohol byť refactored von, aby bolo jednoduchšie používať mimo testov. Osobne by som nevadilo, keby tieto informácie boli vždy zhromažďované, keď DEBUG je pravda, nie len testované.