gpt4 book ai didi

Django REST Framework - 在 ApiClient 的序列化器测试中设置请求

转载 作者:行者123 更新时间:2023-12-02 19:41:08 25 4
gpt4 key购买 nike

我已经读过: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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com