我构建了一个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
。
感谢。
答案 0 :(得分:8)
在测试中实例化序列化程序时,您需要传递context
参数以将request1
添加到序列化程序的context
。
您可以通过传递
context
来提供任意附加上下文 实例化序列化程序时的参数。
您需要执行以下操作:
# pass context argument
self.serializer = ConferenceSerializer(context={'request': request1})
这将为request1
中的序列化程序提供所需的context
对象。