在烧瓶单元测试中覆盖烧瓶.g

rit*_*h87 6 python unit-testing flask flask-login

我正在尝试为使用 OpenID 进行身份验证的 Flask 应用程序编写一些单元测试。由于似乎无法通过 OpenID 登录测试客户端(我问了这个问题,但没有收到任何回复:Flask OpenID unittest),我想在我的测试中覆盖 g.user,所以我尝试了来自http://flask.pocoo.org/docs/testing/#faking-resources-and-context 的代码片段,它按预期工作。

不幸的是,当使用烧瓶登录时,g.user 在设置的 before_request 包装器中被覆盖

g.user = current_user
Run Code Online (Sandbox Code Playgroud)

current_user 是匿名的,所以我的测试用例坏了。一种解决方法是仅在测试模式下执行 before_request 包装器代码,但您需要在生产代码中添加特定于测试的逻辑似乎很蹩脚。我也尝试过处理请求上下文,但 g.user 最终仍然被覆盖。任何解决这个问题的干净方法的想法?

小智 -1

基于Flask 单元测试中的另一个问题,我如何模拟请求全局“g”对象上的对象?对我有用的是以下内容:

在我的应用程序中,我将 before_request 中包含的登录逻辑重构为单独的函数。然后,我在测试中修补了该函数,以便它返回我想要用于一系列测试的特定用户。before_request 仍然与测试一起运行,但通过修补它调用的函数,我现在可以避免实际的登录过程。

我不确定这是最干净的方法,但我认为这比在 before_request 中添加仅测试逻辑更好;这只是一个重构。