2012-04-13 28 views
5

tôi đã viết các trang trí sau đây được sử dụng trong một số quan điểm Django mà tôi không muốn người dùng phải đăng nhập (như đăng kýquên mật khẩu):Đơn vị thử nghiệm trang trí bằng 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 

Khi tôi đã có nó, tôi có thể dễ dàng viết:

@not_logged_in 
def register(request): 
    ... 

tôi đã viết các unit test cho quan điểm rằng đang sử dụng nó, và nó đang làm việc không có vấn đề, nhưng tôi đang tự hỏi điều gì sẽ là cách tốt nhất của đơn vị thử nghiệm hàm not_logged_in một mình?

+1

Bạn đã xem xét thử nghiệm cho login_required chưa? https://code.djangoproject.com/browser/django/trunk/django/contrib/auth/tests/decorators.py – dannyroa

+0

@dannyroa Cảm ơn bạn rất nhiều. Tôi sẽ làm ngay bây giờ. Tôi chắc chắn nó sẽ là một tài liệu tham khảo tuyệt vời :) –

Trả lời

3

Tôi cho rằng bạn có thể dễ dàng thử đối tượng request, sau đó trang trí một chức năng tầm thường với trang trí của bạn và chuyển yêu cầu đó vào một tham số.

Tôi cũng giả sử rằng _wrapper của bạn không thực sự có tham số request không được sử dụng?

+0

Bạn là chính xác. Trước hết, tôi đã làm 'def __wrapper (* args, ** kwargs)' nhưng sau đó tôi thêm tham số 'request' theo cách thủ công, và quên sửa đổi mã ở đây trên SO :) –