2011-02-10 4 views
3

내 사이트의 등록 프로세스의 일부로 세션 데이터를 설정하는보기가 몇 가지 있습니다. 나중의보기는 설정된 세션 데이터에 따라 다릅니다. 브라우저에서이 모든 것이 제대로 작동하지만 테스트를 시도 할 때 요청간에 세션 데이터가 손실되어 테스트가 불가능 해 보입니다. 다음은 내가 겪고있는 문제의 간단한 예입니다. 나는 그러나 세션 데이터가 손실 및 get_name는 302Django 1.1의 영구 세션을 테스트 할 수 없습니다.

>>> c = Client() 
>>> r = c.post(reverse(set_name)) 
>>> r = c.post(reverse(get_name)) 
>>> r.status_code 
200 

def set_name(request): 
    request.session['name'] = 'name' 
    return HttpResponse() 

def get_name(request): 
    try: 
     name = request.session['name'] 
    except KeyError: 
     return redirect(reverse(set_name)) 
    return HttpResponse(name) 
+0

테스트 환경에는 어떤 설정이 적용됩니까? 설정 미들웨어가 올바르게 설정되어 있습니까? 단위 테스트에서 올바르게 로그인하고 있습니까? 올바른 순서로 실행중인 테스트입니까? –

답변

2

세션 장고에 매우 어색 테스트 반환되고, get_name 세션 [ '이름']에 액세스 할 수 있으며 200를 반환 할 것으로 예상합니다. 먼저 세션 엔진을 설정해야합니다.

class TestSession(TestCase): 
"""A class for working with sessions - working. 

http://groups.google.com/group/django-users/browse_thread/thread/5278e2f2b9e6da13?pli=1 

To modify the session in the client do: 
session = self.client.session 
session['key'] = 'value' 
session.save() 
""" 

def setUp(self): 
    """Do the session preparation magic here""" 
    super(TestSession, self).setUp() 

    from django.conf import settings 
    from django.utils.importlib import import_module 
    engine = import_module(settings.SESSION_ENGINE) 
    store = engine.SessionStore() 
    store.save() # we need to make load() work, or the cookie is worthless 
    self.client.cookies[settings.SESSION_COOKIE_NAME] = store.session_key 

테스트 케이스의 기본 클래스로이 클래스를 사용하십시오. 자세한 정보는 링크를 확인하십시오.

+0

티켓 # 10899는 장고의 장래의 버전에서 이것이 더 쉬울 것이라는 희망을 제기합니다. https://code.djangoproject.com/ticket/10899를 참조하십시오. – akaihola

관련 문제