2012-04-13 14 views
5

me escribió lo siguiente decorador para ser utilizado en algunas vistas de Django en el que no desea que el usuario puede registrar en (como registro y olvidó la contraseña-):unidad de prueba decoradores en 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 vez que tengo, puedo escribir fácilmente:

@not_logged_in 
def register(request): 
    ... 

he escrito pruebas unitarias para los puntos de vista que lo están utilizando, y está funcionando sin problemas, pero me pregunto cuál sería la mejor manera de la unidad probando la función not_logged_in solo?

+1

¿Has mirado la prueba para iniciar sesión? https://code.djangoproject.com/browser/django/trunk/django/contrib/auth/tests/decorators.py – dannyroa

+0

@dannyroa Muchas gracias. Lo haré ahora. Estoy bastante seguro de que será una gran referencia :) –

Respuesta

3

Supongo que puede burlarse fácilmente del objeto request, luego decorar una función trivial con su decorador y pasarle un parámetro a la solicitud.

Supongo que su _wrapper realmente no tiene un parámetro request sin usar?

+0

Estás en lo correcto. Antes que nada, estaba haciendo 'def __wrapper (* args, ** kwargs)', pero luego agregué el parámetro 'request' de forma manual y olvidé modificar el código aquí en SO :) –