2016-05-13 57 views
1

我目前正在爲我們的項目編寫測試,並且遇到了問題。我們有一個觀點的這一部分,這將用戶重定向回到他們來自包括一條錯誤消息(這是被保存在session)傳來頁:在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') 

一旦HttpResponseRedirect踢的第一件事新視圖所做的是掃描會話,以查看是否有任何錯誤消息存儲在會話中。如果有,我們把它們放在一本字典,然後從會議中刪除:

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是一個字符串,而我比較它與一個整數。我通過將第二行更改爲:

if int(errorCode) == 4201: