我构建了一个 Web 应用程序,其中后端是使用 Django REST Framework 实现的。现在我正在编写单元测试,并且在测试我的序列化程序方法时遇到了问题。这是我正在努力使用的序列化程序方法的一个示例:
def get_can_edit(self, obj):
request = self.context.get('request')
user = User.objects.get(username=request.user)
return user == obj.admin
当试图从测试中调用它时,首先我声明了一个序列化程序的实例:
self.serializer = ConferenceSerializer()
但现在我需要 self.serializer
在 get_can_edit
执行 self.context.get('request')
时获得正确的请求。我使用 RequestFactory 创建了一个包含正确信息的假请求:
self.request1 = RequestFactory().get('./fake_path')
self.request1.user = self.user1
现在我卡住了,因为我不确定如何将 request1
添加到 serializer
以便 self.context.get('request')
将返回 request1
。
谢谢。
最佳答案
在测试中实例化序列化程序时,您需要传递context
参数 以将request1
添加到序列化程序的context
.
来自 including extra context: 上的 DRF 文档
You can provide arbitrary additional context by passing a
context
argument when instantiating the serializer.
你需要做类似的事情:
# pass context argument
self.serializer = ConferenceSerializer(context={'request': request1})
这将在其context
中向您的序列化程序提供所需的request1
对象。
关于python - Django REST Framework - 在序列化程序测试中设置请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38771852/