Django - ImportError: Failed to import test module:
У меня проблема с учебником, за которым я следую. мы дошли до точки тестирования, и я продолжаю получать сообщение об ошибке при запуске. Задание - В проекте Yatube напишите тесты, которые проверяют, что
при отправке валидной формы со страницы создания поста
reverse('posts:create_post') создаётся новая запись в базе данных;
при отправке валидной формы со страницы редактирования поста reverse('posts:post_edit', args=('post_id',)) происходит изменение поста с post_id в базе данных.
python manage.py test
Вот моя ошибка:
Creating test database for alias 'default'...
FF.........
======================================================================
FAIL: test_cant_create_existing_group (posts.tests.test_forms.PostForm)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\dev\hw02_community\yatube\posts\tests\test_forms.py", line 67, in test_cant_create_existing_group
self.assertFormError(
File "D:\dev\hw02_community\venv\lib\site-packages\django\test\testcases.py", line 520, in assertFormError
self.fail(msg_prefix + "The form '%s' was not used to render the response" % form)
AssertionError: The form 'form' was not used to render the response
======================================================================
FAIL: test_create_task (posts.tests.test_forms.PostForm)
Валидная форма создает запись в Post.
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\dev\hw02_community\yatube\posts\tests\test_forms.py", line 109, in test_create_task
self.assertRedirects(response, reverse('posts:profile', kwargs={
File "D:\dev\hw02_community\venv\lib\site-packages\django\test\testcases.py", line 345, in assertRedirects
self.assertEqual(
AssertionError: 200 != 302 : Response didn't redirect as expected: Response code was 200 (expected 302)
----------------------------------------------------------------------
Ran 11 tests in 0.192s
FAILED (failures=2)
Destroying test database for alias 'default'...
System check identified no issues (0 silenced).
Я не понимаю, почему я получаю эту ошибку.
Вот мой код в posts/tests/test_views.py:
from ..forms import PostForm
from ..models import Post, Group
from django.test import Client, TestCase
from django.urls import reverse
from django.contrib.auth import get_user_model
User = get_user_model()
class PostForm(TestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.user = User.objects.create_user(username='StasBasov')
cls.authorized_author = Client()
cls.group = Group.objects.create(
title='test_title',
slug='test-slug',
description='test_description'
)
cls.post = Post.objects.create(
author=cls.user,
text='test_text',
)
def setUp(self):
# Создаём неавторизованный клиент
self.guest_client = Client()
# Создаём авторизованный клиент
self.authorized_client = Client()
self.authorized_client.force_login(self.user)
def test_cant_create_existing_group(self):
# Подсчитаем количество записей в Post
posts_count = Post.objects.count()
form_data = {
'text': 'Текст из формы',
'group': 'group',
}
response = self.guest_client.post(
reverse('posts:index'),
data=form_data,
follow=True
)
# Убедимся, что запись в базе данных не создалась:
# сравним количество записей в Post до и после отправки формы
self.assertEqual(Post.objects.count(), posts_count)
# Проверим, что форма вернула ошибку с ожидаемым текстом:
# из объекта response берём словарь 'form',
# указываем ожидаемую ошибку для поля 'slug' этого словаря
self.assertFormError(
response, 'form', 'slug',
'Адрес "first" уже существует, придумайте уникальное значение'
)
# Проверим, что ничего не упало и страница отдаёт код 200
self.assertEqual(response.status_code, 200)
def test_create_task(self):
"""Валидная форма создает запись в Post."""
# Подсчитаем количество записей в Post
posts_count = Post.objects.count()
form_data = {
'text': 'test_text',
'group': 'test_group'
}
# Отправляем POST-запрос
response = self.guest_client.post(reverse('posts:index'), data=form_data)
# Проверяем, сработал ли редирект
self.assertRedirects(response, reverse('posts:profile', kwargs={
'username': self.user.username
}))
# Проверяем, увеличилось ли число постов
self.assertEqual(Post.objects.count(), posts_count + 1)
# Проверяем, что создалась запись с заданным слагом
self.assertTrue(
Post.objects.filter(
text='test_text',
group='test_group',
# image='tasks/small.gif'
).exists()
)
Форма создания поста, для которой пишется тест (posts/form.py):
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('text', 'group',)