django - 测试受保护的视图 - 处理 PermissionDenied 响应
问题描述
我正在尝试测试受保护的视图。未经身份验证的用户被重定向到登录页面。当我运行测试时,它会引发django.cose.exceptions.PermissionDenied
这是正常的,但是我怎样才能在没有失败的情况下编写它,以及如何测试重定向是否正确?
这是我所做的。
class TestProtectedRegistrationListView:
"""
Verify registration views are protected from unauthenticated access.
"""
def test_access_url(
self, user: settings.AUTH_USER_MODEL, request_factory: RequestFactory
):
view = RegistrationListView.as_view()
request = request_factory.get("/admin_staff/registrations")
request.user = user
resp = view(request)
assert resp == PermissionDenied
解决方案
这是感兴趣的解决方案(@wencakisa 正确建议):
def test_authenticated_non_staff(self, rf):
req = rf.get(reverse("dashboard.staff:lang-create"))
user = UserFactory()
assert False is user.is_staff
req.user = user
with pytest.raises(PermissionDenied):
views.LangCreateView.as_view()(req)
为了回忆并回答我自己的愚蠢评论,测试响应status_code
没有任何意义,因为我们提出了例外异常。
推荐阅读
- macos - 为什么 Google 公共 DNS 让您为 DNS-over-TLS 设置代理服务器以在 Mac OS 上运行?
- c# - Startup.cs 中的这个 C# HttpContext 上下文来自哪里?
- python - 循环pycountry转换
- python - Python数据框删除前n行并剩余移动
- ruby-on-rails - Mongoid 从文档中的数组返回特定对象
- javascript - 在 ajax 函数中使用“onClick()”函数,同时继续使用其成功数据?
- batch-file - 如何通过 Jenkinsfile 在批处理中使用变量执行 Git 命令
- python - ArrayField 最大尺寸?
- c# - 带有自定义参数的 C# 事件 - 如何使用 C++ 实现类似的功能?
- java - Android通知信息不在java类ArrayList中