2011-02-10 10 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は、将来のバージョンのDjangoでこれがより簡単になることを期待しています。 https://code.djangoproject.com/ticket/10899を参照してください。 – akaihola

関連する問題