【发布时间】:2019-04-15 16:12:33
【问题描述】:
我有一个这样装饰的视图:
@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)
我如何编写单元测试来确认视图是用 check_has_permission 和一组 'is_manager' 装饰的?
我希望我可以为装饰器本身编写一组测试,然后我只需要确认我为它装饰的每个视图调用了正确的组。
【问题讨论】:
-
到底是
check_has_permission? -
不要测试视图是否被装饰,这太元了。相反:使用生成的用户登录 django 客户端。测试经理用户是否在该视图中获得 HTTP 200 OK,而非经理用户获得 HTTP 403。
-
@wim 我经常重复使用装饰器,所以如果想测试一次而不是每个视图上的所有变体。
-
你的装饰器在每个sn-p中都有不同的名字。我认为他们应该被命名为相同的?
标签: python django unit-testing python-decorators