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

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

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

В этом уроке мы напишем простейший код, который обеспечит успешное выполнение теста, а также обсудим рефакторинг. Это означает, что в этом уроке мы "соединяем" оставшиеся три шага TDD.

Модель Catalog 

Вот полная модель, показывающая продолжение проекта для этого курса:

from django.db import models


class Catalog(models.Model):
    STATUS_CHOICES = (
        ('true', 'True'),
        ('false', 'False'),
    )

    title = models.CharField(max_length=255)
    ISBN = models.CharField(max_length=13)
    author = models.CharField(max_length=255)
    price = models.DecimalField(max_digits=6, decimal_places=2)
    availability = models.CharField(max_length=5, choices=STATUS_CHOICES, default='false')

    def __str__(self):
        return self.title

Давайте разберем модель.

  • Строки 5–8: у нас есть кортеж, в котором указано, доступна ли книга.
  • Строки 10–12: у нас есть поля titleISBN, и author строкового типа.
  • Строка 13: у нас есть совершенно другой тип, известный как DecimalField для поля price. Он имеет два аргумента max_digits — и decimal_places. Аргумент max_digits указывает максимальное количество допустимых цифр. Аргумент decimal_places типизирует десятичные разряды числа.
  • Строка 14: У нас также есть строковое поле с раскрывающимся списком.

После написания модели следующим шагом выполните миграцию базы данных с помощью команд makemigrations и migrate

 

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

Четвертый шаг TDD — повторно запустить тесты и убедиться, что все они пройдены, включая все предыдущие тесты. Мы должны получить проходные тесты, если код написан правильно и нет регрессий.

Запустите каждый метод тестирования независимо, используя следующие команды:

  • python manage.py test elibrary_app.tests.CatalogModelTests.test_create_book
  • python manage.py test elibrary_app.tests.CatalogModelTests.test_str_representation
  • python manage.py test elibrary_app.tests.CatalogModelTests.test_saving_and_retrieving_book

Запустите глобальный тест, чтобы убедиться, что все тесты проходят с помощью этой команды:

  • python manage.py test


Рефакторинг и улучшение модели 

Рефакторинг кодовой базы неизбежен по мере роста проекта. Также важно улучшить качество кода. Однако мы всегда должны стремиться писать простой для понимания код, не усложняя его.

Рефакторинг не является обязательным в процессе TDD. В этом случае ясно, что тесты фиксируют то, для чего предназначен код. В нашем случае рефакторить тест и Catalog модель нет необходимости. 


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

Тесты падают с ошибкой, т.к. в модели длина поля ISBN ограничена 13 символами (ISBN = models.CharField(max_length=13)), а в тестах мы пытаемся засунуть в это поле 17 символов (first_book.ISBN = '978-3-16-148410-0')

@Sergei_Aleshin, спасибо! Поправили тесты.