我构建了一个 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
does self.context.get('request')
。我使用正确的信息创建了一个虚假请求请求工厂 https://docs.djangoproject.com/en/1.9/topics/testing/advanced/:
self.request1 = RequestFactory().get('./fake_path')
self.request1.user = self.user1
现在我陷入困境,因为我不确定如何添加request1
to serializer
这样self.context.get('request')
将返回request1
.
Thanks.
你需要pass context
争论 to add request1
到序列化器的context
在测试中实例化序列化器时。
从 DRF 文档开始包括额外的上下文: http://www.django-rest-framework.org/api-guide/serializers/#including-extra-context
您可以通过传递一个来提供任意附加上下文context
实例化序列化器时的参数。
你需要做类似的事情:
# pass context argument
self.serializer = ConferenceSerializer(context={'request': request1})
这将提供所需的request1
反对你的序列化器context
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)