Для приложения по недвижимости у меня есть форма поиска и ListView на основе классов, в котором отображаются только те объекты (свойства), которые соответствуют поисковому запросу из формы:
# views.py
from django.views.generic import ListView
from django.db.models import Q
from .models import Property
from .forms import PropertyForm
class ListPageView(ListView):
template_name = 'property_list.html'
model = Property
def get_queryset(self):
plz = self.request.GET.get('plz')
rooms = self.request.GET.get('rooms')
if plz and not rooms:
object_list = Property.objects.filter(zip_code__exact=plz)
elif rooms and not plz:
object_list = Property.objects.filter(rooms__exact=rooms)
elif plz and rooms:
object_list = Property.objects.filter(
Q(zip_code__icontains=plz) & Q(rooms__exact=rooms)
)
else:
object_list = self.model.objects.none()
return object_list
Тесты
Я написал тест, чтобы проверить логику моего взгляда.Мне удалось написать тест, который проверяет, не возвращает ли набор запросов ничего:
from django.test import TestCase
from django.db.models import Q
from na_mi.models import Property
class ListPageViewTest(TestCase):
@classmethod
def setUpTestData(cls):
Property.objects.bulk_create(
[Property(zip_code=4054,rooms=1),
Property(zip_code=4132,rooms=4),
Property(zip_code=4132,rooms=4),
Property(zip_code=4132,rooms=3),
Property(zip_code=4056,rooms=1)]
)
# tests if the queryset returns nothing
def test_view_no_match(self):
response = self.client.get('/list/')
self.assertContains(response, 'Sorry, no search result')
Вопрос: Как я могу проверить свое представление, если оно возвращает правильное количество наборов запросов?
Я хочуиметь тест, который гарантирует, что правильное количество наборов запросов возвращается.Нечто подобное (псевдокод).
def test_view_show_zip_code_only(self):
response = self.client.get('/list/?plz=4054&rooms=&title=/')
self.assertContains(response.NUMBER_OF_QUERYSETS_RETURNED, '1')
Здесь он должен возвращать только один набор запросов, поскольку в базе данных существует только одна запись базы данных, которая сопоставляет запрос (plz=4054
), и больше ничего не запрашивается.
Я нашелTransactionTestCase.assertNumQueries(num, func, *args, **kwargs)
, но я не хочу проверять свой набор запросов. Я хочу проверить свое представление.
Как это сделать?