如何从视图中删除单元测试的“@oidc.login_required”?

2024-05-02

I use 烧瓶样机 /questions/tagged/flask-oidc用于用户登录和pytest /questions/tagged/pytest供测试用。对于单元测试,我想“删除”@oidc.require_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_login away:

# 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'

首次安装blinker https://pypi.org/project/blinker/通过点。我不知道为什么,但这是必需的。

那么这对我有用:

# core modules
from unittest import mock

# 3rd party modules
import pytest
from flask import appcontext_pushed, g

# internal modules
import exampleapp


@pytest.fixture
def client():
    app = exampleapp.app
    app.testing = True
    app.before_request_funcs[None] = []

    def handler(sender, **kwargs):
        g.oidc_id_token = {'sub': 'some-user-id', 'email': '[email protected] /cdn-cgi/l/email-protection'}
    client = app.test_client()
    with appcontext_pushed.connected_to(handler, app):
        yield client


def test_private(client):
    with mock.patch.object(
        exampleapp.oidc, "validate_token", return_value=True
    ):
        rv = client.get('/hello')
        assert rv.data == b'Hello'

灵感来自https://github.com/fedora-infra/elections https://github.com/fedora-infra/elections

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从视图中删除单元测试的“@oidc.login_required”? 的相关文章

  • GoogleTest 枚举类的测试错误打印

    我正在使用 GoogleTest 版本 1 7 0 来测试我的 C 应用程序 我有一个枚举定义如下 namespace MyNamespace enum class MyEnum MyEnumValue MyEnumValue2 Googl
  • 用于 Kotlin 中单元测试的 BuildConfigField 模拟

    我正在尝试尽可能多地涵盖Kotlin Android 库我遇到了有关自定义 BuildConfig 变量的问题 更广为人知的是buildConfigField 我想模拟这个变量来测试两者true and false values 从 Gra
  • 使用内联查询进行单元测试

    我知道有几个问题与我的类似 Dapper 单元测试 SQL 查询 https stackoverflow com questions 20461553 dapper unit testing sql queries 测试简洁的查询 http
  • 如何用 Jest 模拟 Sequelize?

    我正在尝试为调用 Sequelize 来创建数据库的代码编写单元测试 我一生都无法弄清楚如何模拟对 Sequelize 的调用 以便我可以断言他们已经正确创建了数据库表 我点击 Sequelize 的代码如下 import Sequeliz
  • 我的单元测试 ReSharper 装订线图标未显示

    我已经安装了 ReSharper 4 1 和 Gallio 3 0 5 但没有获得单元测试的装订线图标 测试似乎在测试资源管理器中运行良好 但代码中的测试旁边没有图标 可能是什么原因造成的 我之前安装了 MbUnit 2 4 ReSharp
  • 茉莉花单元测试 - 测试对象的未定义属性

    我有以下声明 expect A BAR name toEqual foo 由于我的对象 A 具有顶级属性 BAR 并且 bar 具有值 foo 传递 我想测试我的结构以确认属性 NONEXISTINGPROP 尚未定义 例如 expect
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • 如何检查带有通配符的模拟调用?

    我正在编写单元测试 并且想要检查具有函数对象的调用 如下所示 call u mock u foobar
  • 在循环中使用 NUnit Assert 时,如何在错误消息中显示更多信息?

    考虑以下代码 Test public void WidgetTest foreach Widget widget in widgets Assert AreEqual 0 widget SomeValue 如果其中一个断言失败 我将收到一条
  • 测试 Python 脚本

    如何使用 doctest unittest nose 等测试框架测试 Python 脚本的 STDOUT 输出 例如 假设运行我的脚本 todo py list 应该返回 取出垃圾 我读过有人将脚本的 STDOUT 打印部分与生成要打印的输
  • 如何在单元测试中模拟 subprocess.call

    我使用的是 python 3 3 我必须测试一个使用的方法call来自 subprocess py I tried subprocess call MagicMock with patch subprocess call as TU cal
  • 如何测试某些代码在 C++ 中无法编译? [复制]

    这个问题在这里已经有答案了 可能的重复 单元测试编译时错误 https stackoverflow com questions 605915 unit test compile time error 我想知道是否可以编写一种单元测试来验证给
  • 单元测试报告的 XML 格式规范(DTD、XSD..)

    许多工具为单元测试报告生成和使用相同的 XML 文件格式 例子 source http junitpdfreport cvs sourceforge net junitpdfreport src resources examples tes
  • falcon,AttributeError:“API”对象没有属性“create”

    我正在尝试测试我的猎鹰路线 但测试总是失败 而且看起来我把所有事情都做对了 my app py import falcon from resources static import StaticResource api falcon API
  • 通过 Web 界面执行 python 单元测试

    是否可以通过 Web 界面执行单元测试 如果可以 如何执行 EDIT 现在我想要结果 对于测试 我希望它们是自动化的 可能每次我对代码进行更改时 抱歉我忘了说得更清楚 EDIT 这个答案此时已经过时了 Use Jenkins https j
  • 有条件地忽略 JUnit 4 中的测试

    好的 所以 Ignore注释适合标记不应运行的测试用例 但是 有时我想忽略基于运行时信息的测试 例如 如果我有一个并发测试 需要在具有一定数量核心的计算机上运行 如果这个测试在单处理器机器上运行 我认为仅仅通过测试是不正确的 因为它还没有运
  • PyUnit 中是否已弃用测试套件?

    按照 PyUnit 中的示例 我想出了以下运行良好的单元测试代码 import unittest class Board def init self x y self x x self y y def eq self other retur
  • 什么是适合 Rails 3 的测试框架?

    去年我一直在使用 Ruby On Rails 但是 无法进行单元测试 现在我必须编写单元测试代码 哪个测试框架好 为什么 有这方面的好的教程吗 我的系统配置 Ruby 1 9 2 Rails 3 Ubuntu 10 第一个技巧是 尝试升级到
  • 使用内存中的单元测试 .ToListAsync()

    下面是由于内存数据库集不支持 ToListAsync 而在 ShouldNotThrow 上失败的测试 我没有方便的确切措辞 但你明白了 如果它很重要 我正在尝试模拟实体框架版本提供的数据库集 6 1 3 TestFixture publi
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable

随机推荐

  • git:显示所有已修改的文件 - 已暂存和未暂存

    我需要一个命令给我所有修改过的文件 这包括暂存 即新添加的文件 和非暂存更改 在普通列表我可以在脚本中使用它 虽然这个问题可能听起来很熟悉 但我只找到接近我想要做的命令 git ls files m 列出 非分阶段 修改但忽略了上演的和新的
  • 在 Ionic/Cordova 中接收 URL

    我正在尝试设置一种从另一个应用程序接收网址的方法 就像 您在浏览器中 单击共享 然后将链接发送到另一个应用程序 我的应用程序 我发现这个科尔多瓦插件 https github com Initsogar cordova webintent
  • chcp 65001 代码页导致程序终止且没有任何错误

    Problem 当我想要的时候问题就出现了inputPython 解释器中的 Unicode 字符 为简单起见 我在示例中使用了变音符号 但我第一次遇到波斯语字符 每当我使用 Python 时CHCP 65001 https ss64 co
  • OnIdle 事件中的异常不会冒泡

    在我的主窗体上 我订阅了两个事件 Application ThreadException 和 Application Idle 理论上 任何未捕获的异常都应该冒泡到主窗体 但是 如果异常发生在 OnIdle 事件中 则此方法不起作用 系统就
  • Altair 中具有自定义置信区间的折线图

    假设我有下面的数据框 我检查了文档 https altair viz github io gallery line with ci html但它仅基于单个列 可重现的代码 x np random normal 100 5 100 data
  • Visual Studio 中的 HTML5 Javascript API Intellisense 支持

    我开始使用 HTML5 CSS3 和新的 JavaScript API 我在 VS 2010 中注意到它不支持新的 JavaScript API 我想知道我是否可以对此做些什么 所以在 Vs2010 中如果我输入 var canvas do
  • SQL DROP TABLE 外键约束

    如果我想像这样删除数据库中的所有表 它会处理外键约束吗 如果没有 我该如何处理 GO IF OBJECT ID dbo Course U IS NOT NULL DROP TABLE dbo Course GO IF OBJECT ID d
  • core.async不是违背Clo​​jure原则吗?

    我看到许多 Clo jure 程序员对新的 core async 库充满热情 尽管它看起来很有趣 但我很难看出它如何符合 Clojure 原则 所以我有以下问题 它在任何地方都使用可变状态 正如函数名称通过感叹号所暗示的那样 例如 alt
  • 更新 Doctrine 后 Symfony 中的“ObjectManager 和 EntityManagerInterface 之间的兼容性”是什么?

    在我的 Symfony 项目中尝试更新 composer update 后出现错误 我寻找解决方案 发现有必要修改实体和构造函数中的使用和类型提示 我已经完成了 然后 我重新启动更新 但出现了不同的错误 并且更新未完全完成 结果 我的网站已
  • Heroku上传-预编译资产失败

    我需要帮助 当尝试将我的应用程序上传到heroku时 我收到此错误 有人知道为什么吗 有几个是错的 谢谢 Using rake 10 1 0 Using tlsmail 0 0 1 Using uglifier 2 1 2 Your bun
  • SVN存储库内容

    我已经设置了 VisualSvn Server 创建了一个存储库 并使用 AnkhSVN 向其中添加了 Visual Studio 解决方案 存储库的 url 类似于https msi pc svn MyProj 由于我的无能 一个问题 此
  • Objective-C / Cocoa Touch 中的 HTML 字符解码

    首先 我发现了这个 https stackoverflow com questions 659602 objective c html escape unescapeObjective C HTML 转义 unescape https st
  • 使用 Beautiful Soup - Python 查找 HTML 中 1 级内的所有文本

    我需要用美丽的汤来完成以下任务 HTML 示例 div Text1 div Text3 div div 我需要对此进行搜索 以便在列表的单独实例中返回给我 Text1 Text2 Text3 我尝试执行 findAll div 但它多次重复
  • LinkedIn OAuth 缺少必需参数“client_id”

    我正在使用 LinkedIn API 并尝试发出请求 但是当我尝试获取 accesstoken 时 我在 json 打印中收到以下错误 Array error gt missing parameter error description g
  • 使用ggmap在地图上绘制等高线

    我有洛杉矶港地区的颗粒物浓度差异 之后 之前 我正在尝试使用 ggmap 在地图上绘制浓度等值线 但结果看起来很不同 我使用的代码如下所示 数据位于代码下方 Code 安装 packages ggmap library ggmap PM r
  • 对 smtp.live.com 和 TIdSmtp(Indy、Delphi)的 SSL 支持

    我正在尝试连接到 smtp live com 发送电子邮件 live com 自 2009 年以来显然支持免费的 pop3 smtp 但这对我来说完全是新闻 当我尝试连接到 smtp live com 端口 587 时 会发生以下情况 Me
  • 如何使用 Core Data (iPhone) 存储 CLLocation?

    我试图保存一个位置 然后使用 Core Location MapKit 和 Core Data 框架在地图上检索该位置 我所做的只是创建了名为 POI 的实体 并添加了诸如纬度 双精度类型 经度 双精度类型 等属性以及其他一些属性 简而言之
  • Mongoose/Mongodb更新返回值及错误处理

    我对 Mongodb update 的返回值以及如何处理它的错误有点困惑 我使用 Node js Express js 和 Mongoose js 作为我的 Mongodb 驱动程序 当我浏览许多教程时 我看到的错误处理的唯一方法是 示例
  • 使用 Template Haskell 生成函数

    是否可以使用 Template Haskell 定义函数 例如 convertStringToValue String gt Int convertStringToValue three 3 convertStringToValue fou
  • 如何从视图中删除单元测试的“@oidc.login_required”?

    I use 烧瓶样机 questions tagged flask oidc用于用户登录和pytest questions tagged pytest供测试用 对于单元测试 我想 删除 oidc require login 我怎样才能做到这