如何测试视图是否用“login_required”装饰(Django)

2024-05-01

我正在对用“login_required”装饰的视图进行一些(独立的)单元测试。例子:

@login_required
def my_view(request):
    return HttpResponse('test')

是否可以测试“my_view”函数是否用“login_required”修饰?

我知道我可以通过集成测试(使用测试客户端)来测试行为(匿名用户被重定向到登录页面),但我想通过隔离测试来完成。

任何想法?

Thanks!


当然,必须可以通过某种方式对其进行测试。但这绝对不值得。编写完全隔离的单元测试来检查装饰器是否已应用只会导致非常复杂的测试。测试错误的可能性比测试行为错误的可能性要高得多。我会强烈劝阻它。

测试它的最简单方法是使用 DjangoClient伪造对关联 URL 的请求,并检查重定向。如果您使用 Django 的任何测试用例作为基类:

class MyTestCase(django.test.TestCase):
    def test_login_required(self):
        response = self.client.get(reverse(my_view))
        self.assertRedirects(response, reverse('login'))

稍微复杂一点但更独立的测试是使用 RequestFactory 直接调用视图来创建请求对象。assertRedirects()在这种情况下不起作用,因为它取决于设置的属性Client:

from django.test.client import RequestFactory

class MyTestCase(django.test.TestCase):
    @classmethod
    def setUpClass(cls):
        super(MyTestCase, cls).setUpClass()
        self.rf = RequestFactory()

    def test_login_required(self):
        request = self.rf.get('/path/to/view')
        response = my_view(request, *args, **kwargs)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response['Location'], login_url)
        ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何测试视图是否用“login_required”装饰(Django) 的相关文章

  • Python 2.7 中的断言对我来说不起作用示例assertIn

    我的 Mac 上安装了 python 2 7 通过在终端中运行 python v 进行验证 当我尝试使用任何新的 2 7 断言方法时 我收到 AtributeError 我看过http docs python org 2 library u
  • Mac OS X 中文件系统的 Unicode 编码在 Python 中不正确?

    在 OS X 和 Python 中处理 Unicode 文件名有点困难 我试图在代码中稍后使用文件名作为正则表达式的输入 但文件名中使用的编码似乎与 sys getfilesystemencoding 告诉我的不同 采取以下代码 usr b
  • Python3.0 - 标记化和取消标记化

    我正在使用类似于以下简化脚本的内容来解析较大文件中的 python 片段 import io import tokenize src foo bar src bytes src encode src io BytesIO src src l
  • 重定向到 /admin/login/ 结果为 302

    当用户未经身份验证时 我尝试重定向到登录页面 在我的settings py我的课程有 MIDDLEWARE CLASSES path to AuthRequiredMiddleware 这是我的课程 class AuthRequiredMi
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • Emacs 24.x 上的 IPython 支持

    我对 IPython 与 Emacs 的集成感到困惑 从 Emacs 24 开始 Emacs 附带了自己的python el 该文件是否支持 IPython 还是仅支持 Python 另外 维基百科 http emacswiki org e
  • 一段时间后终止线程的最 Pythonic 方法

    我想在线程中运行一个进程 它正在迭代一个大型数据库表 当线程运行时 我只想让程序等待 如果该线程花费的时间超过 30 秒 我想终止该线程并执行其他操作 通过终止线程 我的意思是我希望它停止活动并优雅地释放资源 我认为最好的方法是通过Thre
  • 通过索引访问Python字典的元素

    考虑一个像这样的字典 mydict Apple American 16 Mexican 10 Chinese 5 Grapes Arabian 25 Indian 20 例如 我如何访问该字典的特定元素 例如 我想在对 Apple 的第一个
  • SMTP_SSL SSLError: [SSL: UNKNOWN_PROTOCOL] 未知协议 (_ssl.c:590)

    此问题与 smtplib 的 SMTP SSL 连接有关 当与 SMTP 无 ssl 连接时 它正在工作 在 SMTP SSL 中尝试相同的主机和端口时 出现错误 该错误仅基于主机 gmail 设置也工作正常 请检查下面的示例 如果 Out
  • Matplotlib 中 x 轴标签的频率和旋转

    我在下面编写了一个简单的脚本来使用 matplotlib 生成图形 我想将 x tick 频率从每月增加到每周并轮换标签 我不知道从哪里开始 x 轴频率 我的旋转线产生错误 TypeError set xticks got an unexp
  • 使用 Pandas 计算 delta 列

    我有一个数据框 如下所示 Name Variable Field A 2 3 412 A 2 9 861 A 3 5 1703 B 3 5 1731 A 4 0 2609 B 4 0 2539 A 4 6 2821 B 4 6 2779 A
  • Anaconda 无法导入 ssl 但 Python 可以

    Anaconda 3 Jupyter笔记本无法导入ssl 但使用Atom终端导入ssl没有问题 我尝试在 Jupyter 笔记本中导入 ssl 但出现以下错误 C ProgramData Anaconda3 lib ssl py in
  • 使用 Django 在 Google 地图上放置标记

    我正在尝试使用 API 和 HTML5 地理位置根据 Google 地图上模型中存储的纬度和经度放置标记 问题是如何使用模板关键字循环遍历 JavaScript 标签中存储的每个对象的经纬度信息 我不认为这可以在 Django 中完成 我在
  • 当数据库不是 Django 模型时,是否可以使用数据库中的表?

    是否可以从应用程序数据库中的表获取查询集 该表不是应用程序中的模型 如果我有一个不是名为 cartable 的模型的表 从概念上讲 我想这样做 myqueryset cartable objects all 有没有相对简单的方法来做到这一点
  • 在 Django 查询中使用 .extra(select={...}) 引入的值上使用 .aggregate() ?

    我正在尝试计算玩家每周玩游戏的次数 如下所示 player game objects extra select week WEEK games game date aggregate count Count week 但姜戈抱怨说 Fiel
  • 从 pandas DataFrame 中删除少于 K 个连续 NaN

    我正在处理时间序列数据 我在从数据帧列中删除小于或等于阈值的连续 NaN 时遇到问题 我尝试查看一些链接 例如 标识连续 NaN 出现的位置以及计数 Pandas NaN 孔的游程长度 https stackoverflow com que
  • 使用ssl和socket的python客户端身份验证

    我有一个 python 服务器 需要客户端使用证书进行身份验证 我如何制作一个客户端脚本 使用客户端证书由 python 中的服务器使用 ssl 和套接字模块进行身份验证 有没有仅使用套接字和 ssl 而不扭曲的示例 from OpenSS
  • 查找总和为给定数字的值组合的函数

    这个帖子查找提供的 Sum 值的组合 https stackoverflow com a 20194023 1561176呈现函数subsets with sum 它在数组中查找总和等于给定值的值的组合 但由于这个帖子已经有6年多了 我发这
  • 如何为不同操作系统/Python 版本编译 Python C/C++ 扩展?

    我注意到一些成熟的Python库已经为大多数架构 Win32 Win amd64 MacOS 和Python版本提供了预编译版本 针对不同环境交叉编译扩展的标准方法是什么 葡萄酒 虚拟机 众包 我们使用虚拟机和Hudson http hud
  • Android Espresso - 如果未选中,请单击复选框

    I have onView withId R id check box perform click 但我只想在尚未选中该复选框时执行此操作 我怎样才能在浓缩咖啡中做到这一点 我还想根据其之前的状态来切换复选框 开关 起初 我尝试用此方法打开

随机推荐

  • Python OpenCV:检测大体运动方向?

    我仍在编写一个书籍扫描脚本 现在 我所需要的只是能够自动检测翻页 这本书占据了 90 的屏幕 我使用一个粗糙的网络摄像头进行运动检测 所以当我翻页时 运动方向基本上是同一个方向 我修改了一个运动跟踪脚本 但导数却无济于事 usr bin e
  • %d 为长整型

    下面的代码正确吗 据我的理解 它应该不能正常工作 但是在Dev C 编译器上 它可以正常工作 有人可以详细解释一下吗 include
  • Axios 使用 JSONPlaceholder 返回乱码

    我正在尝试学习使用 Axios 获取 API 数据 最终与 HubSpot API 一起使用 我已经建立了一个小型测试项目 尝试使用 fetch 和 Axios 从 JSONPlaceholder 和 RapidAPI FamousQuot
  • Capybara+Selenium:如何在集成测试代码中初始化数据库并使其在 Rails 应用程序中可见?

    配置 使用 RSpec Capybara Selemium 驱动程序 SQLite 数据库对 Rails 项目进行集成测试 情况 我与 Capybara 和默认的rack test 驱动程序进行了一些集成测试 他们直接在数据库中创建用户注册
  • UUID 作为 MySQL id 列的默认值

    我正在尝试向 MySql 8 0 17 中的现有表添加一列 该列需要包含 UUID 我正在尝试将其设置为默认值 这是我正在执行的语句 ALTER TABLE myTable ADD COLUMN UUID varchar 36 NOT NU
  • 如何将我的应用程序的目标 API 级别从 23 更改为 26

    当我尝试将我的应用程序上传到 Google Play 控制台时遇到问题 API 级别必须为 26 而我的应用程序刚刚使用 23 版本开发 现在我不知道如何从 23 更改此 API 版本到 26 使其正常工作 请帮帮我 Steps Go to
  • Azure Active Directory 组/角色

    我试图弄清楚如何从 Web 门户创建 Windows Azure Active Directory 组和 或角色 我在这里遗漏了一些明显的东西吗 我可以创建用户 并将他们分配给 2 个内置角色 但如何创建新角色 或团体 诚然 我还没有尝试过
  • 如何在 Windows 8 上安装 sqlite 或 postgresql 以进行 ruby​​ on Rails 设置?

    我一直在尝试安装数据库作为 ruby on Rails 设置的一部分 我正在运行 64 位 Windows 8 基于 x64 的计算机 我的ruby版本是2 1 3p242 rails版本是4 0 0 sqlite3版本是3 8 6 pos
  • CloudFormation - 永久删除堆栈

    在 CloudFormation 中删除堆栈后 堆栈保留在 已删除 下的 cloudformation 中 有没有一种方法可以完全删除所有已删除的堆栈并在我的项目上获得干净的云信息 我认为你在 90 天的时间里只能在历史中看到它们 此命令讨
  • 从具有重复元素的向量生成所有独特的组合

    这个问题之前曾被问过 但仅适用于具有非重复元素的向量 我无法找到一个简单的解决方案来从具有重复元素的向量中获取所有组合 为了说明这一点 我在下面列出了一个例子 x lt c red blue green red green red 向量 x
  • 删除编译时的 LESS // 注释

    是否可以配置LESS在通过JS编译时删除 注释 我想从输出的 less 文件中删除它们 Less的单行注释 根据文档所述 应该保持沉默 单行注释在 LESS 中也有效 但它们是 沉默的 它们不会出现在编译后的 CSS 输出中 Hi I m
  • AutoFixture,创建电子邮件地址列表

    我正在编写一些单元测试并有一个名为Account其中有 public Guid AccountId get set public IEnumerable
  • jQuery:检查字段的值是否为 null(空)

    这是检查字段值是否为的好方法null if person data document type value NULL 或者 还有更好的方法 字段的值不能为空 它始终是字符串值 该代码将检查字符串值是否为字符串 NULL 您想检查它是否是空字
  • 将 showModalDialog() 的内容添加到剪贴板 Google 脚本

    当我单击按钮时 我已将格式化数据添加到模态对话框中 我想要的内容showModalDialog 当我单击按钮时也会自动添加到剪贴板 模态是用下面的代码生成的 并且temp是我想要添加到剪贴板的输出 Output to Html var ht
  • 在 C# 汇编版本中使用前导零是否合适?

    我正在为我的 dot net dll 设置程序集版本 汇编版本具有以下格式 主要版本 次要版本 内部版本号 修订版 我将 Verison 设置如下 200 1 1 0 现在我的问题是我是否需要在次要版本 内部版本号和修订号中保留前导零 20
  • 覆盖菜单按钮标签文本颜色 (MacOS SwiftUI)

    我可以覆盖菜单按钮标签的 设置后变暗 颜色吗 下面的 GIF 显示了一个清晰明亮的菜单项 在新选择后会变暗 此系统样式的默认行为 例如 在触控板首选项中 但它不符合可访问性标准 例如 WCAG 要求活动控件中该字体大小的亮度对比度 gt 4
  • 删除ID最小的记录

    当我在 MySQL 中输入此查询时 DELETE FROM myTable WHERE ID SELECT Min ID FROM myTable 我收到以下错误消息 1093 You can t specify target table
  • 枚举本质上不是 IEnumerable 的集合?

    当您想要递归枚举一个分层对象 根据某些条件选择一些元素时 有许多技术示例 例如 扁平化 然后使用 Linq 进行过滤 就像在这里找到的那 些 链接文本 https stackoverflow com questions 141467 rec
  • Razor:为什么我的变量不在范围内

    inherits umbraco MacroEngines DynamicNodeContext using System Collections List
  • 如何测试视图是否用“login_required”装饰(Django)

    我正在对用 login required 装饰的视图进行一些 独立的 单元测试 例子 login required def my view request return HttpResponse test 是否可以测试 my view 函数