这个问题是对 Python 中装饰器的精彩回答 的后续:
我使用给定的“片段使任何装饰器通常接受任何参数”。
然后我有这个(这里是简化的)装饰器:
@decorator_with_args
def has_permission_from_kwarg(func, *args, **kwargs):
"""Decorator to check simple access/view rights by the kwarg."""
def wrapper(*args_1, **kwargs_1):
if 'kwarg' in kwargs_1:
kwarg = kwargs_1['kwarg']
else:
raise HTTP403Error()
return func(*args_1, **kwargs_1)
return wrapper
- 与这个装饰器一起工作,没问题,它做得很好。
- 测试一个完全不需要 kwargs 的类似装饰器,结果相同。
但是用以下模拟测试这个装饰器不起作用:
def test_can_access_kwarg(self): """Test simple permission decorator.""" func = Mock(return_value='OK') decorated_func = has_permission_from_slug()(func(kwarg=self.kwarg)) # It will raise at the following line, whereas the kwarg is provided... response = decorated_func() self.assertTrue(func.called) self.assertEqual(response, 'OK')
当我没有“kwarg”关键字参数时,它会返回我提出的异常......
有没有人知道如何测试(最好通过模拟)这样一个由另一个装饰器装饰的装饰器,它需要访问传递给函数的关键字参数之一?