首页 > 解决方案 > 如何在 Django 中测试查询集

问题描述

我对 Django 很陌生,需要帮助来测试我的视图模块。现在视图只返回数据库中的所有对象:

def get_queryset(self):
    return people.objects.all()

我想测试视图是否返回所有对象。我知道我应该使用 assertQuerysetEqual 并且我已经阅读过它,但仍然不确定如何实现它,因为我对文档了解不多。如果有人可以展示一些示例或解释,将不胜感激。

标签: pythondjangounit-testingdjango-views

解决方案


考虑到您正在使用基于类的视图。您可以执行以下步骤来测试get_queryset方法。测试其他功能的过程应该类似。

  1. 使用来自 django 的请求工厂创建一个请求对象。

from django.test import RequestFactory


request = RequestFactory().get('/view-path')
  1. 创建视图实例

view = YourView()
  1. 附加查看请求

view.request = request
  1. 调用您的方法并比较结果。

qs = view.get_queryset()

整个测试用例看起来像这样

def test_get_queryset(self):
    request = RequestFactory().get('/view-path')
    view = YourView()
    view.request = request

    qs = view.get_queryset()

    self.assertQuerysetEqual(qs, people.objects.all())

推荐阅读