Flask oidc 我怎样才能删除“@oidc.登录“需要”;从一个角度看单元测试?

Flask oidc 我怎样才能删除“@oidc.登录“需要”;从一个角度看单元测试?,flask-oidc,pytest,unit-testing,mocking,Flask Oidc,Pytest,Unit Testing,Mocking,我用于用户登录和测试。对于单元测试,我想“删除”@oidc.require\u login。我该怎么做 我试过的 flask-o的工作方式大致如下: from flask import Flask, url_for, redirect from flask_oidc import OpenIDConnect app = Flask(__name__) app.config['OIDC_CLIENT_SECRETS'] = 'client_secrets.json' # Contents: #

我用于用户登录和测试。对于单元测试,我想“删除”
@oidc.require\u login
。我该怎么做

我试过的 flask-o的工作方式大致如下:

from flask import Flask, url_for, redirect
from flask_oidc import OpenIDConnect

app = Flask(__name__)
app.config['OIDC_CLIENT_SECRETS'] = 'client_secrets.json'
# Contents:
# Create client_id and client_secret at https://console.developers.google.com/apis/credentials
# {
#     "web": {
#         "client_id": "123456789012-abc123hi09123.apps.googleusercontent.com",
#         "client_secret": "ab123456789ABCDEFGHIJKLM",
#         "redirect_uris": ["http://localhost:5000"],
#         "auth_uri": "https://accounts.google.com/o/oauth2/auth",
#         "token_uri": "https://accounts.google.com/o/oauth2/token",
#         "userinfo_uri": "https://www.googleapis.com/oauth2/v3/userinfo"
#     }
# }
app.config['SECRET_KEY'] = 'uq4aKjUvWXTPTIyfCz7mTtcG'
app.config['OIDC_ID_TOKEN_COOKIE_SECURE'] = False
app.config['OIDC_SCOPES'] = ["openid", "profile", "email"]
app.config['OIDC_CALLBACK_ROUTE'] = '/authorization-code/callback'
oidc = OpenIDConnect(app)


@app.route('/')
@oidc.require_login
def index():
    return redirect(url_for('personalized'))


@app.route('/personalized')
@oidc.require_login
def personalized():
    info = oidc.user_getinfo(['email', 'openid_id'])
    return 'Hello, {} ({})'.format(info.get('email'), info.get('openid_id'))


@app.route('/hello')
@oidc.require_login
def constant():
    return 'Hello'


if __name__ == '__main__':
    app.run(port=5000)
然后,我希望单元测试可以模拟
@oidc.require\u login

# core modules
from unittest import mock

# 3rd party modules
import pytest

# internal modules
import exampleapp


@pytest.fixture
def client():
    app = exampleapp.app
    client = app.test_client()
    yield client


@mock.patch("flask_oidc.OpenIDConnect")
def test_private(mock_require_login, client):
    rv = client.get('/hello')
    assert rv.data == b'Hello'
首先通过pip安装。我不知道为什么,但这是必须的

这对我来说很有用:

#核心模块
从unittest导入模拟
#第三方模块
导入pytest
从烧瓶导入appcontext_,g
#内部模块
导入示例应用程序
@pytest.fixture
def client():
app=示例app.app
app.testing=True
请求前应用函数[无]=[]
def处理程序(发送器,**kwargs):
g、 oidc_id_token={'sub':'some user id','email':'foo@bar.com'}
client=app.test\u client()
已推送appcontext_。已连接到(处理程序,应用程序):
收益客户
def测试_专用(客户端):
使用mock.patch.object(
exampleapp.oidc,“验证令牌”,返回值=True
):
rv=client.get(“/hello”)
assert rv.data==b'Hello'
灵感来自