对于某些视图,我有一个TestCase,但是我也试图为我的post admin
组合并测试。他们具有post.change_post
和post.delete_post
的权限,就像用户可以的一样。
这是一个小代码段,
from django.contrib.auth import get_user_model
from django.test import TestCase, Client
from django.urls import reverse
from fixtureless.factory import create
from .models import Post
class TestPostViews(TestCase):
def setUp(self):
super().setUp()
self.user = get_user_model().objects.create(username='test_user')
self.form = create(Post, {'title': 'test_title'})
self.client = Client()
def test_update_post(self):
"""
Test UpdateView updates users post
"""
self.client.force_login(user=self.user)
response = self.client.put(reverse('post:update', kwargs={'pk': self.form.pk}),
{'title': 'testing'})
self.assertEqual(response.status_code, 200)
# reloads a models value from the database
self.form.refresh_from_db()
self.assertEqual(self.form.title, 'test_title')
def test_delete_confirm_page(self):
"""
Test DeleteView takes user to confirmation page
"""
self.client.force_login(user=self.user)
response = self.client.get(reverse('post:delete', kwargs={'pk': self.form.pk}))
self.assertContains(response, 'delete')
def test_delete_post(self):
"""
Test DeleteView deletes a post
"""
self.client.force_login(user=self.user)
response = self.client.post(reverse('post:delete', kwargs={'pk': self.form.pk}))
self.assertRedirects(response, reverse('post:list'))
self.assertFalse(Post.objects.filter(pk=self.form.pk).exists())
对此有任何提示吗?我应该为post admin
创建一个单独的TestCase,还是可以在初始setUp()
方法中添加它?
答案 0 :(得分:0)
我想我与这个片段越来越近了...
class TestPostViews(TestCase):
def setUp(self):
super().setUp()
self.user1 = get_user_model().objects.create(username='test_user1')
self.user2 = get_user_model().objects.create(username='test_user2',
password='test_pw')
self.form = create(Post, {'user': self.user1, 'title': 'test_title'})
self.client = Client()
# Group setup
group_name = "post admin"
self.group = Group(name=group_name)
self.group.save()
def test_admin_can_delete(self):
self.user2.groups.add(self.group)
self.user2.save()
self.client.login(username='test_user2', password='test_pw')
response = self.client.post(reverse('posts:delete', kwargs={'pk': self.form.pk}))
self.assertRedirects(response, reverse('posts:list'))
仍然出现错误
Failure
Expected :'/accounts/login/?next=%2Fpost%2Fdelete%2F2143257160%2F'
Actual :'/post/list/'