Тестирование проекта Django

Архив с файлами готового проекта:

Протестируйте проект Yatube

Большую часть заданий вы выполнили в течение уроков, все они будут проверены. Если вы что-то не успели сделать — самое время этим заняться.Ниже перечислены все тесты, которые нужно было сделать в уроках и отмечено, какие ещё тесты нужно написать.

Тестирование Models: «Unittest в Django: тестирование моделей»

Протестируйте модели приложения posts в Yatube.

Добавьте в классы Post и Group метод __str__ (если его ещё нет):

  • для класса Post — первые пятнадцать символов поста: **post.text[:15];
  • для класса Group — название группы.

Протестируйте, правильно ли отображается значение поля __str__ в объектах моделей.

Тестирование URLs: «Unittest в Django: тестирование URLs»

Проверьте доступность страниц и названия шаблонов приложения Posts проекта Yatube. Проверка должна учитывать права доступа.

Проверьте, что запрос к несуществующей странице вернёт ошибку 404.

Подсказки

  • Если заранее соберёте страницы в списки и прогоните однотипные тесты через subTest — будете совсем молодец.
  • Подумайте перед составлением словаря с шаблонами и адресами. Некоторые шаблоны использованы дважды для разных адресов. Возможно, в качестве ключей словаря будет выгоднее использовать адреса страниц, а не названия шаблонов, как описано в теории.

Проверка namespase:name и шаблонов: «Unittest в Django: тестирование Views»

Напишите тесты, проверяющие, что во view-функциях используются правильные html-шаблоны.

Тестирование контекста: «Unittest в Django: тестирование views»

Проверьте, соответствует ли ожиданиям словарь context, передаваемый в шаблон при вызове.

Дополнительная проверка при создании поста: : «Unittest в Django: тестирование Views»

Проверьте, что если при создании поста указать группу, то этот пост появляется

  • на главной странице сайта,
  • на странице выбранной группы,
  • в профайле пользователя.

Проверьте, что этот пост не попал в группу, для которой не был предназначен.

Тестирование Forms: «Unittest в Django: тестирование Forms»

В проекте Yatube напишите тесты, которые проверяют, что

  • при отправке валидной формы со страницы создания поста reverse('posts:create_post') создаётся новая запись в базе данных;
  • при отправке валидной формы со страницы редактирования поста reverse('posts:create_post', args=('post_id',)) происходит изменение поста с post_id в базе данных.

Рекомендации

Ваша задача — написать работающие и оптимизированные тесты.

По возможности применяйте методы setUp или setUpClass.

Однотипные тесты пишите через subTest.

Необязательные задания:

Models

Добавьте в модель posts.Post атрибуты verbose_name и help_text и протестируйте их:

class Post(models.Model):
    text = models.TextField(
        'Текст поста',
        help_text='Введите текст поста'
    )
    pub_date = models.DateTimeField(
        'Дата публикации',
        auto_now_add=True
    )
    author = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        verbose_name='Автор'
    )
    group = models.ForeignKey(
        Group,
        on_delete=models.SET_NULL,
        related_name='posts',
        blank=True,
        null=True,
        verbose_name='Группа',
        help_text='Выберите группу'
    ) 

Обычно тесты verbose_name и help_text пишут только в приступе сильной coverage-зависимости или в учебных целях. Выбирайте, с кем вы!

URLs

Задание 1

Попробуйте использовать в тестах описания из HTTPStatus вместо кодов состояния.

Задание 2

В проекте Yatube есть приложения users и about. Протестируйте их urls.

Подсказки

В простых случаях (например, в приложении about всего два адреса) нет нужды в сложной структуре папки с тестами. Тесты можно писать в фале tests.py, автоматически сгенерированном при создании приложения.

Views

  1. Проверьте namespase:name в приложениях user и about.
    Адрес reverse('users:signup') должен обрабатывать users/signup.html
  2. Если шаблоны в сценарии восстановления пароля через email не были переопределены — проверять их namespase:name не нужно. Если шаблоны переопределены — проверьте соответствие namespase:name.
  3. Проверьте, что на страницу reverse('users:signup') в контексте передаётся форма для создания нового пользователя.

Forms

Проверьте, что при отправке валидной формы reverse('users:signup') создаётся новый пользователь.





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: