如何测试django装饰器?

如何测试django装饰器?,django,python-3.x,testing,Django,Python 3.x,Testing,我有一个decorator,在那里我可以验证用户是否有任何权限。这段代码对我有用,但我想为它编写一个测试。 我如何测试any_permission_所需的函数 from django.contrib.auth.decorators import user_passes_test def any_permission_required(*perms): return user_passes_test(lambda u: any(u.has_perm(perm) for perm in

我有一个decorator,在那里我可以验证用户是否有任何权限。这段代码对我有用,但我想为它编写一个测试。 我如何测试any_permission_所需的函数

from django.contrib.auth.decorators import user_passes_test


def any_permission_required(*perms):
    return user_passes_test(lambda u: any(u.has_perm(perm) for perm in perms))


@any_permission_required('app.ticket_admin', 'app.ticket_read')
def ticket_list(request):
...

最后,在Alasdair和Django测试代码的帮助下,我找到了一个解决方案

from django.test import RequestFactory

class TestFoo(TestCase):

    def setUp(self):
        self.user = models.User.objects.create(username='foo', password='bar')
        self.factory = RequestFactory()

    def test_any_permissions_pass(self):
        perms = Permission.objects.filter(codename__in=('ticket_admin', 'ticket_read'))
        self.user.user_permissions.add(*perms)
        @any_permission_required('app.ticket_admin', 'app.ticket_read')
        def a_view(request):
            return HttpResponse()
        request = self.factory.get('/foo')
        request.user = self.user
        resp = a_view(request)
        self.assertEqual(resp.status_code, 200)
你可以看看这本书来寻找灵感。