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

标签 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

谢谢。

最佳答案

在测试中实例化序列化程序时,您需要传递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/

相关文章:

python - Python 中特定于对象的方法?

python - 比较 Pandas Dataframe 的列名

python - Python 3.3 中的 time.sleep() 函数?

python - 如何从 Python 3 中的当前目录中的文件导入?

python - 使用序列化程序从 URL 保存图像

javascript - 我可以选择类型 ="file"吗?

python - 我如何执行 django 模型验证以排除

django - Gunicorn worker 超时

django - 在序列化器剩余框架中序列化连接表

jquery - 无法使用 Google Search Console 抓取我的新网站