首页 > 解决方案 > django tests - 测试登录和权限

问题描述

我有以下设置:我有一个视图和两个可能的权限组。我想测试我的视图是否在所有可能的情况下都可以访问。意义:

我的权限控制通过以下方式工作Mixin

class PermissionMixin(object):
    group_list = None

    def in_groups(self, u):
        if u.is_authenticated():
            if u.is_superuser or bool(u.groups.filter(name__in=self.group_list)):
                return True
        return False

    def dispatch(self, request, *args, **kwargs):
        if self.in_groups(request.user):
            return super(PermissionMixin, self).dispatch(request, *args, **kwargs)
        return render(request, '403.html', status=403)

我的网址如下所示:

url(r'^my-view/$', login_required(views.MyView.as_view()), name='my-view-view')

当我尝试使用RequestFactory测试时,我总是得到状态200而不是403oder 302(重定向到登录):

self.factory = RequestFactory()
request = self.factory.get(reverse('my-view'))
request.user = AnonymousUser()
response = MyView.as_view()(request)
self.assertEqual(response.status_code, 302)

当我尝试Client()时,它可以工作,但处理请求需要几秒钟。当我想测试我所有的观点时,我会想在等待 CI 管道时自杀。

任何想法为什么RequestFactory不能正确工作?或者我该如何解决我的问题?

谢谢!

标签: djangounit-testingdjango-views

解决方案


推荐阅读