Python 测试许可证RequiredMixin引发许可证拒绝,而不是403
我正在使用django 1.10.5和所需的许可证mixin。Python 测试许可证RequiredMixin引发许可证拒绝,而不是403,python,django,unit-testing,tdd,Python,Django,Unit Testing,Tdd,我正在使用django 1.10.5和所需的许可证mixin。 如果用户没有正确的权限,我希望返回403错误,而不是将用户重定向到登录名。 理论上,如果在任何地方引发PermissionDenied,则响应对象的状态代码应为403: 测试客户端看不到的唯一异常是Http404、PermissionDenied、SystemExit和可疑操作。Django在内部捕获这些异常,并将它们转换为适当的HTTP响应代码。在这些情况下,您可以在测试中检查response.status\u代码 从文件中: 但
如果用户没有正确的权限,我希望返回403错误,而不是将用户重定向到登录名。
理论上,如果在任何地方引发PermissionDenied,则响应对象的状态代码应为403: 测试客户端看不到的唯一异常是Http404、PermissionDenied、SystemExit和可疑操作。Django在内部捕获这些异常,并将它们转换为适当的HTTP响应代码。在这些情况下,您可以在测试中检查response.status\u代码 从文件中: 但是,我的测试在django.core.exceptions.PermissionDenied异常时停止 这是最简单的test.py:
from django.test import TestCase, RequestFactory
from doingTests.views import ViewWithPermission
from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied
class TestPermission(TestCase):
def test_permission_view(self):
user = User.objects.create(username="john", password="doh")
permView = ViewWithPermission.as_view()
rf = RequestFactory()
request = rf.get('/test/')
request.user = user
self.assertEqual(permView(request).status_code, 403)
使用此view.py:
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.views.generic.base import TemplateView
class ViewWithPermission(PermissionRequiredMixin, TemplateView):
permission_required="doingTests.add_mock"
raise_exception=True
所需的权限实际上并不重要,随机字符串、自定义权限和内置权限都会引发PermissionDenied
因为这里有这么多变量,我可能只是错过了一些东西,例如permission_required需要一个permission对象而不是一个字符串(尝试了一下)
我理解错误,更正如下: 但我开始认为这可能是一个bug,因为测试PermissionDenied异常仍然会引发异常,而不是通过测试
将test.py中的最后一行更改为:
self.assertRaises(PermissionDenied, permView(request))
如果处理正确,一切正常,这需要with语句:
with self.assertRaises(PermissionDenied):
permView(request)
不引发异常,测试通过。但是我仍然想测试错误代码。您可以将视图类更改为complete(使用所有方法)吗?虽然我在原始项目中指定了一个
模板名称,但该类在没有方法的情况下是完整的。添加它不会更改异常行为。