2016-05-13 6 views
1

Ich schreibe gerade Tests für unser Projekt, und ich stieß auf ein Problem. Wir haben diesen Abschnitt einer Ansicht, die den Benutzer zurück auf die Seite umgeleitet werden, wo sie von darunter eine Fehlermeldung kam (das in der Sitzung gespeichert ist wird):Sitzungsdaten werden während des Tests in Django nicht gespeichert

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') 

Sobald der HttpResponseRedirect tritt in die erste Sache, dass die neue Ansicht die Sitzung überprüft, um festzustellen, ob in der Sitzung Fehlermeldungen gespeichert sind. Wenn es, können wir sie in einem Wörterbuch platzieren und löschen Sie sie dann von der Sitzung:

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 

Wir haben jetzt die Fehlermeldung in einem Wörterbuch haben sollte, aber nach dem Wörterbuch Druck wird die Fehlermeldung nicht da ist. Ich habe auch die Sitzung direkt vor der HttpResponseRedirect gedruckt, aber die Sitzung ist auch dort ein leeres Wörterbuch.

Dies ist der Test:

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']) 

Es sieht aus wie die Sitzung nicht zugegriffen werden kann oder geschrieben werden direkt von den Ansichten während des Tests. Ich kann, zugreifen jedoch einen Wert in der Sitzung, indem Sie ihn in der Testeinstellung durch das folgende Stück Code verwenden:

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

Dies ist jedoch nicht das, was ich will, weil ich die Sitzung muß durch gesetzt werden die Ansicht, da es in der gesamten Ansicht viele verschiedene Fehlermeldungen gibt. Weiß jemand, wie man das löst? Danke im Voraus!

Antwort

0

Nach genauem Hinsehen ich das Problem gefunden wird, ist es in der Ansicht selbst:

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

Die Variable Errorcode ist eine Zeichenfolge, und ich war es zu einer ganzen Zahl zu vergleichen. Ich habe es behoben, indem ich die zweite Zeile geändert habe in:

if int(errorCode) == 4201: 
Verwandte Themen