I'm new to unit testing in Django and I'm trying to test my CreateView which creates a new blog post when is submited, my first assertEquals which checks if the response code is 302 which practically means that the form was submited correctly because it was redirected is ok but the second check it gives me this error:
Traceback (most recent call last):
File "/Users/aryanlilian/Desktop/EcoMon/blog/tests/test_views.py", line 53, in test_post_create_view_POST
self.assertEquals(post.title, 'test post')
AssertionError: 'Test post' != 'test post'
- Test post
? ^
+ test post
? ^
my TestCase
from django.test import TestCase, Client
from django.urls import reverse
from blog.models import Post, Comment
from users.models import User
class TestViews(TestCase):
def setUp(self):
self.client = Client()
self.blog_url = reverse('blog')
self.tag_url = reverse('tag', args=['test'])
self.post_url = reverse('post', args=['test-post'])
self.add_post_url = reverse('add-post')
self.user = User.objects.create(
username='testuser',
email='test@test.com',
first_name='test',
last_name='test',
password='test'
)
self.post = Post.objects.create(
author=self.user,
title='Test post',
content='test content post',
)
self.post.tags.add('test')
def test_blog_list_view_GET(self):
response = self.client.get(self.blog_url)
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'blog/blog.html')
def test_tagged_post_list_view_GET(self):
response = self.client.get(self.tag_url)
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'blog/blog.html')
def test_post_detail_view(self):
response = self.client.get(self.post_url)
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(response, 'blog/post.html')
def test_post_create_view_POST(self):
response = self.client.post(self.add_post_url, {
'title': 'test post',
'content' : 'test content',
'category' : 'BUSSINESS',
'tags' : 'test'
})
post = Post.objects.last()
self.assertEquals(response.status_code, 302)
self.assertEquals(post.title, 'test post')
my post model:
class Post(models.Model):
class PostCategory(models.TextChoices):
FAMILY = 'FAMILY', _('Family')
BUSSINESS = 'BUSSINESS', _('Bussiness')
MWRKETING = 'MARKETING', _('Marketing')
SPENDINGS = 'SPENDINGS', _('Spendings')
author = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(_('Title'), max_length=200, unique=True)
content = models.TextField(_('Content'))
category = models.CharField(_('Category'), max_length=9, choices=PostCategory.choices, default=PostCategory.BUSSINESS)
slug = models.SlugField(_('Slug'), max_length=200, blank=True, null=False, unique=True)
tags = TaggableManager(_('Tags'))
published_date = models.DateTimeField(_('Published Date/Time'), auto_now_add=True)
updated_date = models.DateTimeField(_('Updated Date/Time'), auto_now=True)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super().save(*args, **kwargs)
@property
def comments_count(self):
return self.comments.count()
def get_absolute_url(self):
return reverse('blog')
my CreateView:
class PostCreateView(LoginRequiredMixin, IsSuperuserOrStaffMixin, CreateView):
template_name = 'blog/add_post.html'
form_class = PostCreateForm
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
urls.py:
path('post/<slug:slug>/', PostDetailView.as_view(), name='post'),
Aucun commentaire:
Enregistrer un commentaire