2012-04-13 48 views
5

测试装饰我写了下面的装饰在一些Django的视图中使用,我不想(像寄存器忘记密码)进行登录的用户:单位在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 

一旦我有了它,我可以很容易地写:

@not_logged_in 
def register(request): 
    ... 

我已经写单元测试正在使用它的意见,它是工作没有问题,但我想知道什么是最好的方式的单位单独测试not_logged_in函数?

+1

你看过login_required的测试吗? https://code.djangoproject.com/browser/django/trunk/django/contrib/auth/tests/decorators.py – dannyroa 2012-04-14 00:17:50

+0

@dannyroa非常感谢。我现在会做。我很确定这将是一个很好的参考:) – 2012-04-14 07:02:16

回答

3

我想你可以很容易地模拟request对象,然后用装饰器修饰一个简单的函数并传递该请求的参数。

我还假设你的_wrapper没有一个未使用的request参数?

+0

你是对的。首先,我正在执行'def __wrapper(* args,** kwargs)',但后来我手动添加了'request'参数,忘记修改这里的代码:) – 2012-04-14 07:00:47