[英]How to unit test that a function has been decorated?
我有一個這樣裝飾的視圖:
@check_has_permission('is_manager')
def view():
pass
裝飾器看起來像這樣:
def check_has_permission(group=None):
def can_user_access(user):
if user.is_authenticated():
if group == 'is_staff':
return user.is_staff()
elif group == 'is_admin':
return (
user.is_admin() or
user.is_staff()
)
elif group == 'is_manager':
return (
user.is_manager() or
user.is_admin() or
user.is_staff()
)
return False
return user_passes_test(can_user_access, login_url=login_url)
如何編寫單元測試以確認視圖由帶有一組is_manager的check_has_permission裝飾?
我希望我可以為裝飾器本身編寫一組測試,然后只需要確認為每個裝飾器視圖調用正確的組即可。
您需要添加一個可以測試的接縫 。
如果您的裝飾器看起來像這樣:
def is_user_in_group(group):
if user.is_authenticated():
# ... snip - checks on groups and user ...
return False
def check_has_permission(group=None):
def can_user_access(user):
return is_user_in_group(user, group)
return user_passes_test(can_user_access, login_url=login_url)
然后,您的測試可以模擬is_user_in_group
和user_passes_test
,調用修飾的函數,測試is_user_in_group
被正確的組調用,並測試user_passes_test
被模擬is_user_in_group
的返回值is_user_in_group
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.