如何在 Django 中测试查询集

Cam*_*lla 1 python django unit-testing django-views

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

def get_queryset(self):
    return people.objects.all()
Run Code Online (Sandbox Code Playgroud)

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

Naf*_*war 10

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

  1. 使用 django 的请求工厂创建请求对象。

from django.test import RequestFactory


request = RequestFactory().get('/view-path')
Run Code Online (Sandbox Code Playgroud)
  1. 创建视图实例

view = YourView()
Run Code Online (Sandbox Code Playgroud)
  1. 附加查看请求

view.request = request
Run Code Online (Sandbox Code Playgroud)
  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())
Run Code Online (Sandbox Code Playgroud)