Я тестирую приложение библиотеки Django, в котором есть модель Book и строка поиска для фильтрации этих книг , которая проверяет title__icontains = 'q'.
Шаблон URL :
path('search_book/', views.BookSearchListView.as_view(), name='search_book'),
Маршрутизация URL:
http://127.0.0.1:8000/catalog/search_book/?q=house
Реализация следующего Представления на основе классов :
class BookSearchListView(BookListView):
paginate_by = 3
def get_queryset(self):
result = super(BookSearchListView, self).get_queryset()
query = self.request.GET.get('q')
if query:
query_list = query.split()
result = result.filter(
reduce(operator.and_,
(Q(title__icontains=q) for q in query_list))
)
return result
В моем tests.py
я должен разработать контрольные примеры для вышеприведенного представления, но не понимаю, как это сделать.Я попытался сделать следующее:
class BookSearchListViewTest(TestCase):
"""
Test case for the Book Search List View
"""
def setUp(self):
test_user1 = User.objects.create_user(username='testuser1', password='1X<ISRUkw+tuK')
test_user1.save()
test_author = Author.objects.create(first_name='John', last_name='Smith')
Book.objects.create(title='House', author=test_author, summary='Published in 1990',
isbn='123456789123')
Book.objects.create(title='Money', author=test_author, summary='Published in 1991',
isbn='9876543210123')
Book.objects.create(title='Mouse', author=test_author, summary='Published in 1992',
isbn='1293874657832')
def test_redirect_if_not_logged_in(self):
response = self.client.get(reverse('books'))
self.assertRedirects(response, '/catalog/customer_login/?next=/catalog/books/')
def test_query_search_filter(self):
self.assertQuerysetEqual(Book.objects.filter(title__icontains='House'), ["<Book: House>"])
Пока тест test_query_search_filter выполняется успешно, в моем отчете о покрытии класс BookSearchListView не проходит тестирование.
Я новичок в Django и имеютолько что начал с тестовых случаев.