Flask 烧瓶开放式单位检验

Flask 烧瓶开放式单位检验,flask,openid,flask-extensions,Flask,Openid,Flask Extensions,我正在尝试为我的flask应用程序编写一个针对OpenID的单元测试,但是在调用 oid。尝试登录(,) 我得到一个错误: 运行时错误:不支持重定向到外部目标 所以,像所有优秀的So用户一样,我四处寻找一些解决方案: 使用NoExtRef flask扩展伪装oid提供程序。我不确定这在应用程序级别是否可行,因为我假设flask openid会与oid url发生冲突(当我尝试它时,它只是将我重定向到原始页面)。但这看起来很难看,因为我正在严格地为单元测试修改代码 创建我自己的oid服务器,但这可

我正在尝试为我的flask应用程序编写一个针对OpenID的单元测试,但是在调用

oid。尝试登录(,)

我得到一个错误:

运行时错误:
不支持重定向到外部目标

所以,像所有优秀的So用户一样,我四处寻找一些解决方案:

  • 使用NoExtRef flask扩展伪装oid提供程序。我不确定这在应用程序级别是否可行,因为我假设flask openid会与oid url发生冲突(当我尝试它时,它只是将我重定向到原始页面)。但这看起来很难看,因为我正在严格地为单元测试修改代码
  • 创建我自己的oid服务器,但这可能仍然是一个外部重定向(我稍后会在绝望时尝试)

  • 我想另一种选择是忽略为登录编写单元测试,而只是使用AwesomeFlask测试框架在Flask.g中设置用户。但是我更愿意保留登录单元测试。

    还有一种替代方法-monkey补丁OpenID扩展的
    try\u login
    方法:

    class LoginTestMonkeyPatch(object):
        def __init__(self, oid=None, default_response=None):
            self.response = default_response
            if oid is not None:
                self.init(oid)
    
        def init(self, oid):
            oid.try_login = self.try_login
    
    
        def try_login(self, *args, **kwargs):
            # Do whatever you want to do here
    

    如果您正在修补登录名,则可能没有对其进行测试

    我也有同样的问题。对我来说,最好的解决方案是禁用视图的“需要登录”部分

    我不知道您是否使用Flask Login,但如果您使用Flask Login,您可以绕过所需的@Login\u,这样您甚至不必担心尝试使用以下内容登录用户:

    def setUp
       env = Environments(app)
       env.from_object('config.Testing')
       lm = LoginManager()
       lm.init_app(app)
       self.app = app.test_client()
    
    只是想一想,我希望这对你或其他人有所帮助:)


    另外,这是我关于堆栈溢出的第一篇文章。感谢所有帮助我这么多的海报

    反应有点晚,但这种方法效果很好。谢谢你给我介绍猴子修补术!