Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

4.4 Написание тестов для моделей и URL-адресов
4 из 6 шагов пройдено
0 из 6 баллов  получено

В этом шаге мы продолжаем создавать приложение электронной библиотеки, добавляя тесты для URL-адресов нашего приложения Django.

Полный тест для наших URL

Добавим файл test.py новый класс ElibraryURLsTest, в котором мы протестируем URL-адреса для приложения электронной библиотеки:

from django.test import TestCase, SimpleTestCase
from .models import Catalog
from django.urls import reverse
from django.urls.base import resolve
from .views import home

class ElibraryURLsTest(SimpleTestCase):
    """    Тестируем URLs    """

    def test_homepage_url_name(self):
        response = self.client.get(reverse('home'))
        self.assertEqual(response.status_code, 200)

    def test_root_url_resloves_to_homepage_view(self):
        found = resolve('/')
        self.assertEqual(found.func, home)


class CatalogModelTests(TestCase):
    """    Тест модели каталога    """

    def setUp(self):
        self.book = Catalog(
            title='First Django Book',
            ISBN='978-1-60309-3',
            author='Ilya Perminov',
            price='9.99',
            availability='True'
        )

    def test_create_book(self):
        self.assertIsInstance(self.book, Catalog)

    def test_str_representation(self):
        self.assertEqual(str(self.book), "First Django Book")

    def test_saving_and_retrieving_book(self):
        first_book = Catalog()
        first_book.title = 'First Django Book'
        first_book.ISBN = '978-1-60309-3'
        first_book.author = 'Ilya Perminov'
        first_book.price = '9.99'
        first_book.availability = 'True'
        first_book.save()

        second_book = Catalog()
        second_book.title = 'Second Django Book'
        second_book.ISBN = '978-3-60124-1'
        second_book.author = 'Dmitry Seleznev'
        second_book.price = '19.99'
        second_book.availability = 'False'
        second_book.save()

        saved_books = Catalog.objects.all()
        self.assertEqual(saved_books.count(), 2)

        first_saved_book = saved_books[0]
        second_saved_book = saved_books[1]
        self.assertEqual(first_saved_book.title, 'First Django Book')
        self.assertEqual(second_saved_book.author, 'Dmitry Seleznev')

 

  • Строка 1: Поскольку URL-адреса не требуют взаимодействия с базой данных, мы выбираем SimpleTestCase метод.
  • Строка 3: мы импортируем reverse функцию, которая принимает viewname в качестве аргумента. Используется viewname в пути URL. Функция reverse извлекает детали URL определенного пути, используя viewname.
  • Строка 4: мы также импортируем resolve функцию, которая используется для преобразования определенного URL-адреса в view функцию. Поэтому он идет по пути аргументации.
  • Строка 7: у нас есть тестовый класс, ElibraryURLsTest который наследуется от SimpleTestCase.
  • Строка 10: Первый тестовый метод внутри класса используется для проверки того, что URL-адрес, сопоставленный с домашней страницей, работает. Поэтому мы используем код состояния 200, который показывает успешный запрос. self.client.get() Функция действует как фиктивный веб-браузер и позволяет нам проверять наши представления, выполняя запросы GET и POST. Мы называем viewname путь URL-адреса как home. Это важно помнить при кодировании URL-адреса в маршрутах.
  • Строка 14: у нас есть еще один метод тестирования. Его цель — проверить, что корневой URL / обрабатывается правильной функцией просмотра. При тестированию по определенному URL-адресу Django проверяет, какая функция просмотра сопоставлена с URL-адресом. Затем он выполняет необходимую бизнес-логику и отправляет ответ. Поэтому мы хотим, чтобы функция просмотра была сопоставлена с правильным URL-адресом.

 

Запускаем тесты

Это второй шаг, связанный с TDD. Давайте запустим тесты, которые мы только что написали, чтобы увидеть, как они терпят неудачу, используя следующую команду:

  • python manage.py test elibrary_app.tests.ElibraryURLsTest.test_homepage_url_name
  • python manage.py test elibrary_app.tests.ElibraryURLsTest.test_root_url_resloves_to_homepage_view


Как и ожидалось, мы получим неудачные тесты, потому что мы еще не написали нашу маршрутизацию для приложения.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий
Нет обсуждений. Начните первое.