【发布时间】:2010-04-14 14:43:29
【问题描述】:
我正在为我的视图编写详细的功能测试,以补充我的模型上的单元测试。这是一个 Django 项目,我正在使用带有 unittest 的内置 Django 测试框架。显然,在这些功能测试中要检查的重要事项之一是权限设置是否正确。考虑到这一点,我正在尝试这样的事情:
anonclient = Client()
userclient = Client()
userclient.login(username='test_user', password='test')
adminclient = Client()
adminclient.login(username='test_admin', password='test')
path = "/path/to/my/page"
anonresponse = anonclient.get(path)
userresponse = userclient.get(path)
adminresponse = adminclient.get(path)
我需要能够确认 anonclient 和 userclient 都被拒绝权限,而 adminclient 工作正常。但是,我无法找到一种方法来测试这是否已发生可靠!
起初我决定检查响应是否为 302 重定向(因为权限检查失败的副作用正在被重定向)但这意味着无法区分自动重定向用户的功能和失败的功能权限检查。 (我不能只使用 self.assertRedirects(response, url) 因为目标 url 可以通过视图中的 permission_required 装饰器的 login_url 参数覆盖!)
也许我应该考虑扩展 user_passes_test 装饰器,以便在测试失败时向响应对象添加一个属性?然后可以在测试中检查这一点。如果失败,我将不得不通过检查请求的副作用是否发生来确定请求是否成功。这样做会奏效,但会非常冗长,尤其是在进行大量此类检查的情况下。
我无法想象我是第一个遇到这个问题的人,处理这个问题的正确方法是什么,或者我错过了什么?
非常感谢!
【问题讨论】:
标签: python django unit-testing permissions client