2017-09-30 21 views
0

Djangoテストでクッキーを設定する際に問題があります。Djangoテスト:Cookieを設定する(Django 1.11+)

class Test_views(TestCase): 

    def test_set_cookie(self): 
     session = self.client.session 
     session['mycookie'] = 'testcookie' 
     session.save() 
     response = self.client.get(reverse('homepage')) 
     ... 

私は確かにビューでCookieを印刷:

views.py

... 
def homepage(request): 
     print(request.session.keys()) 
     ... 

そして実際、クッキーmycookieが存在しません。

どうやら、それはクッキーを設定する正しい方法です:ところで

https://docs.djangoproject.com/en/1.11/topics/testing/tools/#django.test.Client.session

がrequest.factoryを使用して、働いている:

def add_session_to_request(request): 
    """Annotate a request object with a session (RequestFactory doesn't permit Session""" 
    middleware = SessionMiddleware() 
    middleware.process_request(request) 
    request.session.save() 


class Test_views(TestCase): # testing with cookies set 

    def setUp(self): 
     super(Setting_cookie, self).setUp() 
     factory = RequestFactory() 
     self.request = factory.get(reverse('homepage')) 
     add_session_to_request(self.request) 

    def test_set_cookie(self): 
     session = self.request.session 
     session['mycookie'] = 'testcookie' 
     session.save() 
     response = homepage(self.request) 
     ... 
+0

再生できません。これは私のためにうまく動作します。 cookieにはまったく関係がありませんが、セッションデータは通常cookieに保存されません。また、TestCaseクラスにはすでに 'client'属性があります。これは' setUpClass'で独自の属性を作成するのではなく、使用する必要があります。 –

+0

ありがとうございます。あなたが私の設定ではなくあなたのために働いているので、これをデバッグする方法を知っていますか? – ThePhi

答えて

0

私が間違っSESSION_ENGINEを使用していました設定:

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'

私はそれを忘れてしまった...

+0

まったく同じ問題が発生しています。間違ったSESSION_ENGINEさんはどういう意味ですか? –

+0

テスト内で使用されるSESSION_ENGINEがデフォルトのものです。これはデータベースベースのセッションです(https://docs.djangoproject.com/en/1.11/topics/http/sessions/#configuring-the-session-engine)。 Cookieベースのセッション(これはSESION_ENGINEを定義することによって行われたものです)のようにデフォルト以外のものを使用すると、テストでセッションを使用できなくなります。だから、短くするには、デフォルトのままにしておいてください!しかし、たとえ症状が同じに見えても、これはあなたにとって同じエラーではないかもしれません。 – ThePhi

関連する問題