我正在尝试对一个 Flask 应用程序路径进行单元测试,该路径调用一个由名为“verify_jwt”的自定义装饰器包装的函数。该装饰器与路由调用的函数在同一模块中定义。 verify_jwt 装饰器用作保护需要身份验证的路由的装饰器。它验证请求中的 JWT(使用来自flask_jwt_extended 的 verify_jwt_in_request),并在验证成功时调用修饰函数。如果验证失败,它会记录异常并返回未经授权的响应。
我尝试了在 Stack Overflow 和不同网站上找到的不同方法,例如在导入带有被测函数的模块之前修补装饰器,模拟装饰器内部的 verify_jwt_in_request 函数等。
我没有尝试模拟装饰器 (verify_jwt),而是模拟了其中的函数 (verify_jwt_in_request) - 我也从 Stack Overflow 中得到了这个想法。对于要执行的装饰函数,verify_jwt_in_request 必须不返回任何内容或在验证失败时返回异常。这是我的做法:
> def mock_verify_jwt_in_request(): > return > > with patch('flask_jwt_extended.verify_jwt_in_request', > mock_verify_jwt_in_request): > from your_module import your_function
如果装饰器和被测函数位于同一模块中,此方法也适用。