Django REST框架-在ApiClient的序列化程序测试中设置请求

问题描述 投票:1回答:1

我已经读过:Django REST Framework - Set request in serializer test?。而且它对我不起作用!因为我使用的是APIClient,而不是像他这样的RequestFactory。

我构建了一个Web应用程序,其中使用Django REST Framework实现了后端。现在,我正在编写单元测试,并且在测试序列化器方法时遇到问题。这是我正在苦苦挣扎的串行器方法的一个示例:

def get_can_edit(self, obj):
  request = self.context['request']
  user = User.objects.get(username=request.user)
  return user == obj.admin

[尝试从测试中调用它时,首先我声明了序列化程序的实例:

但是现在,当get_can_edit执行self.context.get('request')时,我需要self.serializer具有正确的请求。我使用API​​Client创建了带有正确信息的虚假请求:

self.client = APIClient()
self.client.force_authenticate(user)
conference = a_fake_conference

res = self.client.get('conference:conference-detail'. args=[conference.id])
serializer = ConferenceSerializer(conference, context={WHAT_IS_REQUEST?}) 
# I'm using a dict as context but the request gave me an error: context={'request': { 'user': user }}

sert.assertEqual(res.data, serializer.data)

现在,我被困住了,因为我不确定如何将请求1添加到序列化程序中,以便request = self.context['request']将返回

谢谢。

django testing django-rest-framework django-serializer
1个回答
0
投票

使用wsgi_request中的APIClient获得WSGI请求对象。

self.client = APIClient()
self.client.force_authenticate(user)
request_object = self.client.wsgi_request

免责声明:不确定这是否是获取request对象的DRF方法。

© www.soinside.com 2019 - 2024. All rights reserved.