Тестирование Django: тест не работает при создании представления с запросом post
Я создаю тесты для своих представлений и не могу создать правильный тест для общего CreateView. В основном я следую этой документации: https://docs.djangoproject.com/pl/4.0/topics/testing/advanced/#django.test.RequestFactory. Есть ли у кого-нибудь решение для этого?
blog.models
class Post(models.Model):
title = models.CharField(max_length=128)
intro = models.TextField()
content = models.TextField()
date = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def get_absolute_url(self):
return reverse('blog:post-detail', kwargs={'pk': self.pk})
def __str__(self):
return self.title
blog.views
class PostCreateView(LoginRequiredMixin, CreateView):
model = Post
fields = ['title', 'intro', 'content', 'category']
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
blog.urls
app_name = 'blog'
urlpatterns = [
path('post/new/', views.PostCreateView.as_view(), name='post-create'),
# some other paths,]
blog.tests.test_views
class PostViewsTests(TestCase):
def setUp(self):
self.author = User.objects.create_user(
username='abcUser,
email='abcuser@mail.com',
password='abcpassword')
self.category = Category.objects.create(name='New test category')
self.new_post = Post.objects.create(
title='Lorem Ipsum',
intro='Neque porro quisquam est ',
content='There is no one who loves pain itself...',
author=self.author,
category=self.category)
self.client = Client()
self.factory = RequestFactory()
def test_post_create_view_if_adds_new_post(self):
data = {
'title': 'Lorem Ipsum2',
'intro': 'Neque porro quisquam...',
'content': 'Neque porro quisquam... - There is no...',
'category': self.category
}
request = self.factory.post(reverse('blog:post-create'), data=data)
request.user = self.author
response = views.PostCreateView.as_view()(request)
newest_post = Post.objects.order_by('-date').first()
self.assertEqual(response.status_code, 200)
self.assertEqual(newest_post.title, 'Lorem Ipsum2')
результат теста:
Found 6 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.F....
======================================================================
FAIL: test_post_create_view_if_adds_new_post (blog.tests.test_views.PostViewsTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\twiad\PycharmProjects\nothing_inclusive\blog\tests\test_views.py",
line 129, in test_post_create_view_if_adds_new_post
self.assertEqual(newest_post.title, 'Lorem Ipsum2')
AssertionError: 'Lorem Ipsum' != 'Lorem Ipsum2'
- Lorem Ipsum
+ Lorem Ipsum2
? +
----------------------------------------------------------------------
Ran 6 tests in 1.084s
FAILED (failures=1)
Destroying test database for alias 'default'...