如何在Django中编写带有分页的单元测试

时间:2019-05-31 19:37:36

标签: python django django-rest-framework

我想在Django rest框架中为我的项目编写单元测试,但是我无法将res.data与serializer.data进行比较 这是我的一个对象Brand的json:

{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "url": "http://localhost:8000/shops/tags/1/",
      "id": 1,
      "name": "PS4",
      "link": "https://www.playstation.com"
    }
  ]
}

这是我的单元测试:

BRANDS_URL = reverse('brands-list')
    def test_retrieve_brand_list(self):
        """Test retrieving a list of brands"""
        Brand.objects.create(name='Bestbuy', link='https://bestbuy.ca')
        Brand.objects.create(name='Amazon', link='https://amazon.ca')
        res = self.client.get(BRANDS_URL)

        brands = Brand.objects.all().order_by('-name')

        context = {'request': RequestFactory().get('/')}
        serializer = BrandsSerializer(brands, context=context, many=True)

        self.assertEqual(res.status_code, status.HTTP_200_OK)
        self.assertEqual(res.data, serializer.data)

我的序列化器:

class BrandsSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Brand
        fields = ('url', 'id', 'name', 'link')

如何将count,next,previous和results添加到我的serializer.data中? 我怎样才能有一个serializer.data像res.data? 我有点迷茫,我找不到解决方法

2 个答案:

答案 0 :(得分:0)

您需要根据需要(或DEFAULT_PAGINATION_CLASS)或在视图((pagination_class)上设置分页类。您没有看到分页内容,因为默认情况下未启用分页设置。

例如,要将基于页码的分页设置为每页默认20个项目(可以被page_size(或自定义)查询参数覆盖),您可以添加全局设置:

REST_FRAMEWORK = {
    ...
    ...
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 20
}

您还可以定义自己的分页类。

Check official doc to get more idea

答案 1 :(得分:0)

您可以尝试以下方法:

*self.assertEqual(res.data['results'], serializer.data)* 

希望这会有所帮助。