2012-04-13 5 views
5

Testen schrieb ich folgendes Dekorateur in einigen Django Ansichten zu verwenden, wo ich will nicht der Benutzer angemeldet sein (wie Register und vergessen-Passwort):Einheit Dekorateure in Python

def not_logged_in(view, redirect_url=None): 
    def _wrapper(request, *args, **kwargs): 
     if request.user.is_authenticated(): 
      return HttpResponseRedirect(
       redirect_url or '/' 
      ) 
     return view(*args, **kwargs) 

    return _wrapper 

Sobald ich es habe, kann ich einfach schreiben:

@not_logged_in 
def register(request): 
    ... 

I Unit-Tests für die Ansichten geschrieben haben, die sie verwenden, und es ist ohne Probleme funktioniert, aber ich frage mich, was der beste Weg wäre, der Einheit Testen Sie die not_logged_in Funktion allein?

+1

Haben Sie sich den Test für login_required angeschaut? https://code.djangoproject.com/browser/django/trunk/django/contrib/auth/tests/decorators.py – dannyroa

+0

@dannyroa Vielen Dank. Ich werde jetzt tun. Ich bin mir ziemlich sicher, dass es eine gute Referenz sein wird :) –

Antwort

3

Ich nehme an, dass Sie das Objekt request leicht verspotten können, dann dekorieren Sie eine triviale Funktion mit Ihrem Dekorateur und übergeben Sie diese Anfrage einen Parameter.

Ich nehme auch an, dass Ihre _wrapper nicht wirklich einen unbenutzten request Parameter hat?

+0

Sie haben Recht. Zuerst habe ich 'def __wrapper (* args, ** kwargs)' gemacht, aber dann habe ich den 'request' Parameter manuell hinzugefügt und vergessen, den Code hier auf SO zu ändern :) –

Verwandte Themen