我想为应用程序进行测试,但我无法做到正确。 我有这样的功能:
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)
答案 0 :(得分:2)
您在视图类上调用get_queryset
,而不是在实例中调用self
。但由于它是一个实例方法,因此它希望将实例作为第一个参数get_queryset
。因此,它将您实际传递的内容作为第一个参数,即用户,并将其分配给self,从而导致错误。
您接受此测试的方法是错误的。您不应直接调用self.assertEqual(response.context['user'].username, 'john')
,而应使用测试客户端的功能,该功能允许您inspect the template context用于呈现响应:
List