/ / Django Test Client: Ako odstrániť hlavičky http - python, django, testovanie jednotiek, hlavičky http

Django Test Client: Ako odstrániť hlavičky http - python, django, unit-testing, http-headers

Pokúšam sa napísať test jednotky pre kus kódu, ktorý kontroluje, či hlavička chýba. Ako môžem vynechať hlavičku http_referer (alebo akúkoľvek hlavičku) z testovacieho klienta Djanga?

def testCase(self):
response = self.client.get("/some_url/")
self.assertNotEqual(500, response.status_code)

odpovede:

3 pre odpoveď č. 1

Namiesto použitia vstavaného testovacieho klienta môžete použiť Djangov dopyt aby ste zostavili svoju požiadavku, pred volaním funkcie upravte objekt žiadosti:

from django.test.client import RequestFactory
from django.test import TestCase

from yourapp.view import yourfunction

class YourTest(TestCase)
def setUp(self):
self.factory = RequestFactory()

def testCase(self):
request = self.factory.get("/yoururl/")
del request.META["HTTP_REFERER"]
yourfunction(request)

0 pre odpoveď č. 2

V takom prípade neprechádzajte testovacím klientom. Ak zmeníte správanie testovacieho klienta a prostredníctvom neho urobíte žiadosť, netestujete kód proti vstupu, s ktorým bude skutočne musieť pracovať.

Nemali by ste dôverovať testovaciemu klientovizostavte HTTP požiadavky presne rovnakým spôsobom ako klient WSGI. Je to dosť dobrá práca, aby sa parametre žiadosti dostali do vášho pohľadu, ale určite to nie je to isté, čo by ste dostali od skutočnej žiadosti.

Účelom testovacieho klienta je chrániť vászo všetkých chaotických detailov o skutočných objektoch žiadostí a odpovedí a jednoducho vám umožní otestovať, ako vaše názory reagujú na vstupné parametre. Vo vašom prípade však musíte tieto údaje otestovať.

Mali by ste vytvárať objekt HTTPRequestrovnakým spôsobom, ako by používal Django - použite toľko funkcií Django, koľko potrebujete na jeho vytvorenie, a potom priamo zavolajte svoj pohľad alebo svoj middleware pomocou tohto objektu HTTPRequest. Ak by váš názor mal vyvolávať výnimku, vyskúšajte ho pomocou assertRaises. Ak by mala vrátiť HTTPResponse so stavovým kódom nastaveným na 500, potom to otestujte - alebo ak je to potrebné, otestujte ich spolu s vlastnou metódou tvrdenia.