私のサイトでは、現在のsession_keyに基づいてユーザーを作成することにより、ログインしていなくても個人がコンテンツを投稿できます。
ビューのテストを設定したいのですが、request.sessionを変更できないようです。
私はこれをしたい:
from Django.contrib.sessions.models import Session
s = Session()
s.expire_date = '2010-12-05'
s.session_key = 'my_session_key'
s.save()
self.client.session = s
response = self.client.get('/myview/')
しかし、エラーが発生します:
AttributeError: can't set attribute
Getリクエストを行う前にクライアントセッションを変更する方法について考えていますか?私は見たことがあります this そしてそれはうまくいかないようです
これは私がそれをした方法です( http://blog.mediaonfire.com/?p=36 の解決策に触発されました)。
from Django.test import TestCase
from Django.conf import settings
from Django.utils.importlib import import_module
class SessionTestCase(TestCase):
def setUp(self):
# http://code.djangoproject.com/ticket/10899
settings.SESSION_ENGINE = 'Django.contrib.sessions.backends.file'
engine = import_module(settings.SESSION_ENGINE)
store = engine.SessionStore()
store.save()
self.session = store
self.client.cookies[settings.SESSION_COOKIE_NAME] = store.session_key
その後、次のようにテストを作成できます。
class BlahTestCase(SessionTestCase):
def test_blah_with_session(self):
session = self.session
session['operator'] = 'Jimmy'
session.save()
等...
Djangoテストフレームワークのクライアントオブジェクトを使用すると、セッションにアクセスできます。 http://docs.djangoproject.com/en/dev/topics/testing/?from = olddocs#Django.test.client.Client.session 詳細
注意してください:To modify the session and then save it, it must be stored in a variable first (because a new SessionStore is created every time this property is accessed)
以下のようなものがうまくいくと思います
s = self.client.session
s.update({
"expire_date": '2010-12-05',
"session_key": 'my_session_key',
})
s.save()
response = self.client.get('/myview/')
Andrew Austinがすでに述べたように、このバグのために機能しません: https://code.djangoproject.com/ticket/11475
あなたができることはこれです:
from Django.test import TestCase
from Django.test.client import Client
from Django.contrib.auth.models import User
class SessionTestCase(TestCase):
def setUp(self):
self.client = Client()
User.objects.create_user('john', '[email protected]', 'johnpassword')
self.client.login(username='john', password='johnpassword')
def test_something_with_sessions(self):
session = self.client.session
session['key'] = 'value'
session.save()
上記のコードのように、User.objects.create_user()とself.client.login()を使用してユーザーを作成してログインすると、セッションが機能するはずです。
セッションなどのダミーデータを挿入するカスタムビューを作成できます。
対応するURLのビュー:/ダミー/:
_def dummy(request):
# dummy init data
request.session['expiry_date'] = '2010-12-05'
return HttpResponse('Dummy data has been set successfully')
_
テストスクリプトよりもself.client.get('/dummy/')
を呼び出すだけです
また、このダミービューを使用して、手動でテストするときにセッションでダミーデータを初期化します。
ドキュメントに従って、テストクライアントのセッションに値を追加できます。
def test_something(self):
session = self.client.session
session['somekey'] = 'test'
session.save()
https://docs.djangoproject.com/en/dev/topics/testing/tools/#Django.test.Client.session
これにより、セッション内のデータが正しく機能する必要があるビューをテストできます。
したがって、この質問の場合:
session = self.client.session
session['expire_date'] = '2010-12-05'
.....
session.save()
ミドルウェア を使用してセッションを変更できます。