2012-10-29 12 views
7

私のようなビューがあります。最後のコメントは私のテストである場合、私はしたいので、Djangoのテストテストでセッションデータを格納し

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. 

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: 
     ... 

そして、私のテストでは特定の値がsession dictにあり、key:valueの組み合わせが正しいかどうかをテストします。これについてどうすればいいですか? request.sessionを使用できますか?

ご迷惑をおかけして申し訳ございません。 docsによると

答えて

26

:上

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

スポット。ドキュメントでそれを見落としている必要があります! –

+0

レスポンスがどこで使われているのかわかりません。それは必要ですか? – robline

+0

'TestCase'が既にそれをしているので、' self.client'in'setUp() 'を設定する必要もありません(https://docs.djangoproject.com/ja/1.11/topics/testing/toolsを参照してください)。 /#default-test-client)を実行します。私は答えを編集しました。 – LaundroMat

関連する問題