2011-07-07 6 views
2

私のunittestでは、セッションに変数を追加する必要があります。その変数はテスト対象のビューで使用されているためです。 Djangoのドキュメントは、これは以下の方法(https://docs.djangoproject.com/en/1.3/topics/testing/#django.test.client.Client.session)で可能であると言う:Django Unittestingセッションに変数を追加する

def test_something(self): 
    session = self.client.session 
    session['somekey'] = 'test' 
    session.save() 

このコード例では、辞書機能が保存されていないというエラーが表示されますので、実際には、動作しません。私はまた、セッションdictの内容を変更するためのさまざまな方法を試しましたが、まだ変更する方法は見つけていません。 私はそれが何を意味するかを知っています。私が戻ってくるものは辞書オブジェクトなので、保存機能はありません。しかし、セッション辞書はキーを追加する際にも更新されません。

self.client.sessionを使用しているときのドキュメンテーションの彫像は、辞書の代わりにSessionStoreオブジェクトを返す必要があります。

+0

あなたは 'unittest'または' django.utils.unittest'を使用していますか? – Gabriel

+0

django.utils.unittest –

+0

なぜそれを保存する必要がありますか?どこでセッションをチェックしていますか? –

答えて

0

Djangoにはバグがありますので、認証されていないユーザーがセッションを変更することはできません。これは対応するチケット:https://code.djangoproject.com/ticket/11475です。

回避策は、セッション変数が設定されたダミービューを作成し、そのビューをClient.get( 'url_of_dummy_view')で呼び​​出すことです。

0

@Sam Stoelingaによって参照されているチケットは、複製としてクローズされています。対応するチケットはhereです。

セッションデータを保存するには、認証されたユーザーを使用する必要があります。私は解決策を見つけたhere

class BlogAdminTestCase(TestCase): 
    def setUp(self): 
     # Setup Test User 
     User.objects.create_user(
      username='foo', 
      password='bar' 
     ) 

     # Must login to modify session variables 
     self.client.login(username='foo', password='bar') 

     s = self.client.session 
     s['my_session_variable'] = 'Yay!' 
     s.save() 
関連する問題