2

OpenID 用のフラスコ アプリの単体テストを作成しようとしていますが、呼び出し時に

oid.try_login(<oid provider>, <params>)

エラーが発生します:

RuntimeError:<class 'flask.testing.FlaskClient'>外部ターゲットへのリダイレクトをサポートしていません

そこで、すべての優れた SO ユーザーと同様に、いくつかの解決策を探しました。

  1. NoExtRef フラスコ拡張機能を使用して oid プロバイダーを偽装します。私はflask-openidがoid URLをいじっていると仮定しているので、これがアプリレベルで可能かどうかはわかりません(そして、試してみると元のページにリダイレクトされました)。しかし、ユニットテストのために厳密にコードを変更しているので、これはかなり醜いようです。
  2. 独自の oid サーバーを作成しますが、これはまだ外部リダイレクトである可能性があります (十分に必死になったらすぐにこれを試します)。

もう 1 つの方法は、ログイン用の単体テストの作成を無視し、すばらしい Flask テスト フレームワークを使用して Flask.g にユーザーを設定することだと思います。しかし、ログインユニットテストを維持したいと思います。

4

2 に答える 2

1

別の方法があります - open-id 拡張機能のtry_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
于 2014-04-20T01:56:19.377 に答える