我已经读过: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
当尝试从测试中调用它时,首先我声明序列化器的一个实例:
但现在我需要 self.serializer 在 get_can_edit 执行 self.context.get('request') 时获得正确的请求。我使用 APIClient 创建了一个包含正确信息的虚假请求:
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)
现在我陷入困境,因为我不确定如何将 request1 添加到序列化器,以便 request = self.context['request']
将返回
谢谢。
最佳答案
使用wsgi_request
(source code-Django) APIClient
来获取 WSGI 请求对象。
self.client = APIClient()
self.client.force_authenticate(user)
res = self.client.get('conference:conference-detail'. args=[conference.id]
# make sure to call the `get(...)` method before accessing `wsgi_request` attribute
<b>request_object = res.wsgi_request</b>
免责声明:不确定这是否是获取request
对象的DRF方式。
关于Django REST Framework - 在 ApiClient 的序列化器测试中设置请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60106359/