在测试 python 中达到 self.request.user

Get to self.request.user in test python

我想为应用程序做测试,但我做不对。 我有这样的功能:

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.

@编辑

抱歉,我没有提供此信息。我正在使用 Django,class 这个函数看起来像这样:

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

您是在视图 class 上调用 get_queryset,而不是在实例中。但由于它是一个实例方法,它需要实例作为第一个参数,self。因此它将您实际传递的内容作为第一个参数 user,并将其分配给 self,因此出现错误。

你的测试方法是错误的。您应该使用测试客户端的功能,而不是直接调用 get_queryset,它允许您 inspect the template context 用于呈现响应:

self.assertEqual(response.context['user'].username, 'john')