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

时间:2016-08-04 15:41:40

标签: python django django-rest-framework

我构建了一个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.serializerget_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

感谢。

1 个答案:

答案 0 :(得分:8)

在测试中实例化序列化程序时,您需要传递context参数以将request1添加到序列化程序的context

来自including extra context:

上的DRF文档
  

您可以通过传递context来提供任意附加上下文   实例化序列化程序时的参数。

您需要执行以下操作:

# pass context argument
self.serializer = ConferenceSerializer(context={'request': request1})

这将为request1中的序列化程序提供所需的context对象。