2016-05-13 8 views
1

私は現在プロジェクトのテストを書いていますが、問題が発生しました。 HttpResponseRedirectがでキックしたらセッションデータがDjangoでのテスト中に保存されていません

if request.GET.get('error_code'): 
    """ 
    Something went wrong or the call was cancelled 
    """ 
    errorCode = request.GET.get('error_code') 
    if errorCode == 4201: 
     request.session['errormessage'] = _('Action cancelled by the user') 
    return HttpResponseRedirect('/socialMedia/manageAccessToken') 

、まず最初に:私たちは、彼らは、エラーメッセージ(それがセッションに格納されています)を含むから来たページに戻ってユーザーをリダイレクトするビューのこのセクションを、持っています新しいビューはセッションをスキャンして、エラーメッセージがセッションに格納されているかどうかを確認します。ある場合は、私たちは辞書にそれらを配置して、セッションからそれを削除します。

def manageAccessToken(request): 
""" 
View that handles all things related to the access tokens for Facebook, 
Twitter and Linkedin. 
""" 
contextDict = {} 
try: 
    contextDict['errormessage'] = request.session['errormessage'] 
    contextDict['successmessage'] = request.session['successmessage'] 
    del request.session['errormessage'] 
    del request.session['successmessage'] 
except KeyError: 
    pass 

現在辞書にエラーメッセージを持っている必要がありますが、辞書を印刷した後、エラーメッセージはありません。私はまた、HttpResponseRedirectの直前にセッションを印刷しましたが、そのセッションは空の辞書でもあります。

これはテストです:

class oauthCallbacks(TestCase): 
""" 
Class to test the different oauth callbacks 
""" 

def setUp(self): 
    self.user = User.objects.create(
     email='[email protected]' 
    ) 
    self.c = Client() 

def test_oauthCallbackFacebookErrorCode(self): 
    """ 
    Tests the Facebook oauth callback view 
    This call contains an error code, so we will be redirected to the 
    manage accesstoken page. We check if we get the error message 
    """ 
    self.c.force_login(self.user) 
    response = self.c.get('/socialMedia/oauthCallbackFacebook/', 
          data={'error_code': 4201}, 
          follow=True, 
         ) 

    self.assertEqual('Action cancelled by the user', response.context['errormessage']) 

セッションは、テスト中にアクセスまたはビューから直接に書き込むことができないように見えます。

session = self.c.session 
    session['errormessage'] = 'This is an error message' 
    session.save() 

これは私がで設定されるセッションを必要とするので、私は、欲しいものがない:私は、しかし、次のコードビットを使用して手動テストでそれを設定することで、セッションの値にアクセスすることができます全体のビューにはさまざまなエラーメッセージが表示されるため、ビューが表示されます。誰もこれを解決する方法を知っていますか?前もって感謝します!

答えて

0

私は問題を見つけ詳しく見て取った後、それはビュー自体である:

errorCode = request.GET.get('error_code') 
if errorCode == 4201: 
    request.session['errormessage'] = _('Action cancelled by the user') 

のerrorCode変数が文字列である、と私はそれを整数に比較しました。 2行目を次のように変更して修正しました:

if int(errorCode) == 4201: 
関連する問題