【问题标题】:Get to self.request.user in test python在测试 python 中获取 self.request.user
【发布时间】:2016-06-06 07:05:41
【问题描述】:

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

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 UzytkownikViewSet(viewsets.ModelViewSet): 
    def get_queryset(self): return  
        User.objects.filter(id=self.request.user.id)

【问题讨论】:

  • 您使用的是什么 ORM 和/或框架? Django、Flask、SQLAlchemy?
  • get_querysetUser的方法吗?
  • @LutzHorn 它不会出现在UzytkownikViewSet.get_queryset
  • 您在get_queryset(self) 内使用self.request,这会导致错误。那么这里的self 是什么?这是什么类的方法?
  • 如果您有信息要添加,请edit您的问题。请同时选择适用的标签。

标签: python django django-views django-tests


【解决方案1】:

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

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

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

【讨论】:

  • 好的,谢谢。你为我澄清了这方面。
猜你喜欢
  • 2012-02-24
  • 2023-04-06
  • 2018-07-11
  • 2018-04-12
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
相关资源
最近更新 更多