2016-05-13 33 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: