2012-04-13 21 views
5

ho scritto il seguente decoratore per essere utilizzato in alcuni punti di vista Django in cui io non voglio all'utente di effettuare il login (come registro e dimenticato la password-):Unità test decoratori 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 

Una volta che ho, posso facilmente scrivere:

@not_logged_in 
def register(request): 
    ... 

ho scritto unit test per le opinioni che la stanno usando, e si sta lavorando senza problemi, ma mi chiedo che cosa sarebbe il modo migliore di unità testare solo la funzione not_logged_in?

+1

Hai guardato il test per login_questito? https://code.djangoproject.com/browser/django/trunk/django/contrib/auth/tests/decorators.py – dannyroa

+0

@dannyroa Grazie mille. Lo farò ora. Sono abbastanza sicuro che sarà un ottimo riferimento :) –

risposta

3

Suppongo che si possa facilmente prendere in giro l'oggetto request, quindi decorare una funzione banale con il proprio decoratore e passare tale richiesta a un parametro.

Suppongo anche che il tuo _wrapper non abbia un parametro inutilizzato request?

+0

Sei corretto. Prima di tutto, stavo facendo 'def __wrapper (* args, ** kwargs)' ma poi ho aggiunto manualmente il parametro 'request', e ho dimenticato di modificare il codice qui su SO :) –