gpt4 book ai didi

python - Django rest 框架单元测试 View 集 mixins

转载 作者:行者123 更新时间:2023-12-04 15:09:26 40 4
gpt4 key购买 nike

我需要对 Django REST 框架 mixin 进行单元测试。所以我去做一个看起来像这样的测试:

class TestMyMixin(APITestCase):

class DummyView(MyMixin,
viewsets.ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer

#some properties omitted

def setUp(self):
self.view = self.DummyView.as_view(\
actions={'get':'list'})

def test_basic_query(self):
instance = MyModel.objects.create(\
**{'name':'alex'})
request = APIRequestFactory().get(\
'/fake-path?query=ale',
content_type='application/json')
response = self.view(request)
self.assertEqual(\
response.status_code,status.HTTP_200_OK)
json_dict = json.loads(\
response.content.decode('utf-8'))
self.assertEqual(json_dict['name'],instance.name)

但是,当我运行此测试时,我确实得到了:
raise ContentNotRenderedError('The response content must be 'django.template.response.ContentNotRenderedError: The response content must be rendered before it can be accessed.

django REST framework 似乎有一些不同的单元测试方法 viewsets , mixinsviews .
但我不知道我应该做什么。
官方文档页面建议使用真实的 url,但它更适合验收测试而不是单元测试。

最佳答案

出现此问题是因为您的 View 的响应没有得到呈现,因此 _is_renderedFalseContentNotRenderedError引发异常。

您可以在 django.template.response 中了解为什么以及如何发生这种情况。源代码。

您可以通过调用 .render() 来解决该问题。手动根据您的回复:

response = self.view(request)
self.assertEqual(response.status_code, status.HTTP_200_OK)

# Render the response manually
response.render()
json_dict = json.loads(response.content.decode('utf-8'))
self.assertEqual(json_dict['name'],instance.name)

关于python - Django rest 框架单元测试 View 集 mixins,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35455639/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com