在测试 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')
我想为应用程序做测试,但我做不对。 我有这样的功能:
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')