在test python中访问self.request.user

时间:2016-06-06 07:05:42

标签: python django django-views django-tests

我想为应用程序进行测试,但我无法做到正确。 我有这样的功能:

def get_queryset(self):
    return User.objects.filter(id=self.request.user.id)

我写了这样的测试:

 def test_Uzytkownik_get_query(self):
    self.c = Client()
    self.user = User.objects.create_user(username='john', email='lennon@thebeatles.com', password='johnpassword')
    self.c.login(username='john', password='johnpassword')
    response = self.c.get('/')
    self.assertEqual(UzytkownikViewSet.get_queryset(response.context['user']),"john")

但我得到了这个

AttributeError: 'User' object has no attribute 'request'

我知道john实际上并不是这个查询集的结果,但我不能做任何测试,因为:self.request.user.whatever。

@Edit

对不起家伙我没有提供这些信息。我正在使用Django,而这个函数的类看起来像这样:

class UzytkownikViewSet(viewsets.ModelViewSet): 
    def get_queryset(self): return  
        User.objects.filter(id=self.request.user.id)

1 个答案:

答案 0 :(得分:2)

您在视图类上调用get_queryset,而不是在实例中调用self。但由于它是一个实例方法,因此它希望将实例作为第一个参数get_queryset。因此,它将您实际传递的内容作为第一个参数,即用户,并将其分配给self,从而导致错误。

您接受此测试的方法是错误的。您不应直接调用self.assertEqual(response.context['user'].username, 'john') ,而应使用测试客户端的功能,该功能允许您inspect the template context用于呈现响应:

List