Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 测试许可证RequiredMixin引发许可证拒绝,而不是403_Python_Django_Unit Testing_Tdd - Fatal编程技术网

Python 测试许可证RequiredMixin引发许可证拒绝,而不是403

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代码 从文件中: 但

我正在使用django 1.10.5和所需的许可证mixin。
如果用户没有正确的权限,我希望返回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(使用所有方法)吗?虽然我在原始项目中指定了一个
模板名称,但该类在没有方法的情况下是完整的。添加它不会更改异常行为。