Django REST框架 - 在串行器测试中设置请求?

Tom*_*Tom 6 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
Run Code Online (Sandbox Code Playgroud)

当试图从测试中调用它时,首先我声明一个序列化器的实例:

self.serializer = ConferenceSerializer()
Run Code Online (Sandbox Code Playgroud)

但现在我需要self.serializer的时候有正确的请求get_can_editself.context.get('request').我使用RequestFactory创建了一个包含正确信息的虚假请求:

self.request1 = RequestFactory().get('./fake_path')
self.request1.user = self.user1
Run Code Online (Sandbox Code Playgroud)

现在我卡住了,因为我不能确定如何添加request1serializer这样self.context.get('request')会返回request1.

谢谢.

Rah*_*pta 10

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

从DRF文档中包含额外的上下文:

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

你需要做一些事情:

# pass context argument
self.serializer = ConferenceSerializer(context={'request': request1})
Run Code Online (Sandbox Code Playgroud)

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