2017-09-30 3 views
0

J'ai des problèmes à paramétrer le cookie dans le test Django.Test Django: Paramétrer le cookie (Django 1.11+)

class Test_views(TestCase): 

    def test_set_cookie(self): 
     session = self.client.session 
     session['mycookie'] = 'testcookie' 
     session.save() 
     response = self.client.get(reverse('homepage')) 
     ... 

j'imprimer les cookies dans les vues pour être sûr:

views.py

... 
def homepage(request): 
     print(request.session.keys()) 
     ... 

Et en effet, le cookie mycookie n'existe pas.

Apparemment, c'est la bonne façon de mettre cookie:

https://docs.djangoproject.com/en/1.11/topics/testing/tools/#django.test.Client.session

Par ailleurs, en utilisant request.factory, il travaille:

def add_session_to_request(request): 
    """Annotate a request object with a session (RequestFactory doesn't permit Session""" 
    middleware = SessionMiddleware() 
    middleware.process_request(request) 
    request.session.save() 


class Test_views(TestCase): # testing with cookies set 

    def setUp(self): 
     super(Setting_cookie, self).setUp() 
     factory = RequestFactory() 
     self.request = factory.get(reverse('homepage')) 
     add_session_to_request(self.request) 

    def test_set_cookie(self): 
     session = self.request.session 
     session['mycookie'] = 'testcookie' 
     session.save() 
     response = homepage(self.request) 
     ... 
+0

Impossible de reproduire; Cela fonctionne bien pour moi. Bien qu'il n'y ait rien à voir avec les cookies, les données de session ne sont généralement pas stockées dans les cookies. Et la classe TestCase a déjà un attribut 'client', que vous devriez utiliser plutôt que de créer le vôtre dans' setUpClass'. –

+0

Merci. Est-ce que tu as une idée de comment je débogue ça alors que ça marche pour toi et pas avec ma config? – ThePhi

Répondre

0

j'utilisais le mauvais SESSION_ENGINE dans les paramètres:

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'

J'ai oublié que j'ai fait cela ...

+0

Vivre exactement le même problème. Que voulez-vous dire par mauvaise SESSION_ENGINE? –

+0

le SESSION_ENGINE utilisé à l'intérieur du test est celui par défaut: il s'agit d'une session basée sur une base de données (https://docs.djangoproject.com/fr/1.11/topics/http/sessions/#configuring-the-session-engine). Si vous utilisez une session autre que celle par défaut, comme une session basée sur un cookie (ce que j'ai fait en définissant SESION_ENGINE), le test ne peut plus utiliser les sessions. Donc, pour être court, laissez-le par défaut! Mais ce n'est peut-être pas la même erreur pour vous même si les symptômes se ressemblent. – ThePhi