2012-04-13 21 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