2012-10-29 15 views
7

Mam widoku jako takie:Django testowania przechowywane dane sesji w testach

def ProjectInfo(request): 
    if request.method == 'POST': 
     form = ProjectInfoForm(request.POST) 
     if form.is_valid(): 
      # if form is valid, iterate cleaned form data 
      # and save data to session 
      for k, v in form.cleaned_data.iteritems(): 
       request.session[k] = v 
      return HttpResponseRedirect('/next/') 
     else: 
      ... 
    else: 
     ... 

iw moich testów:

from django.test import TestCase, Client 
from django.core.urlresolvers import reverse 
from tool.models import Module, Model 
from django.contrib.sessions.models import Session 

def test_project_info_form_post_submission(self): 
    """ 
    Test if project info form can be submitted via post. 
    """ 
    # set up our POST data 
    post_data = { 
     'zipcode': '90210', 
     'module': self.module1.name, 
     'model': self.model1.name, 
     'orientation': 1, 
     'tilt': 1, 
     'rails_direction': 1, 
    } 
    ... 
    self.assertEqual(response.status_code, 302) 
    # test if 'zipcode' in session is equal to posted value. 

Więc, gdzie ostatni komentarz jest w moim teście, chcę sprawdź, czy konkretna wartość jest w dyktafonie session i czy parowanie klucz: wartość jest poprawne. Jak mam to zrobić? Czy mogę użyć request.session?

Każda pomoc bardzo ceniona.

Odpowiedz

26

Według docs:

from django.test import TestCase 

class SimpleTest(TestCase): 
    def test_details(self): 
     # Issue a GET request. 
     self.client.get('/customer/details/') 
     session = self.client.session 
     self.assertEqual(session["somekey"], "test") 
+0

na miejscu. Muszę to przeoczyć w dokumentach! –

+0

Nie widzę, gdzie używana jest odpowiedź. Czy to musi być? – robline

+0

Nie musisz też ustawiać 'self.client'in'setUp() ', ponieważ' TestCase' już to robi (zobacz https://docs.djangoproject.com/en/1.11/topics/testing/tools/# default-test-client). Edytowałem odpowiedź. – LaundroMat

Powiązane problemy