在Django的CreateView中测试get_success_url,可以通过编写单元测试来验证其功能。下面是一个示例的测试代码:
from django.test import TestCase
from django.urls import reverse
from django.contrib.auth.models import User
from django.views.generic import CreateView
from myapp.models import MyModel
class CreateViewTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(username='testuser', password='testpassword')
self.client.login(username='testuser', password='testpassword')
self.url = reverse('create_view_url')
self.data = {
'field1': 'value1',
'field2': 'value2',
# 添加其他字段的值
}
def test_get_success_url(self):
response = self.client.post(self.url, data=self.data)
self.assertEqual(response.status_code, 302) # 检查是否重定向到成功页面
self.assertEqual(response.url, reverse('success_url')) # 检查重定向的URL是否正确
def test_create_object(self):
response = self.client.post(self.url, data=self.data)
self.assertEqual(response.status_code, 302) # 检查是否重定向到成功页面
self.assertEqual(MyModel.objects.count(), 1) # 检查是否成功创建了对象
obj = MyModel.objects.first()
self.assertEqual(obj.field1, 'value1') # 检查字段值是否正确
self.assertEqual(obj.field2, 'value2')
# 检查其他字段的值
def test_authenticated_user_required(self):
self.client.logout()
response = self.client.post(self.url, data=self.data)
self.assertEqual(response.status_code, 302) # 检查是否重定向到登录页面
def test_template_used(self):
response = self.client.get(self.url)
self.assertTemplateUsed(response, 'create_view_template.html') # 检查是否使用了正确的模板
def test_form_valid(self):
response = self.client.post(self.url, data=self.data)
self.assertEqual(response.status_code, 302) # 检查是否重定向到成功页面
# 可以根据具体的业务逻辑编写其他的form_valid测试
在上述代码中,我们首先创建了一个测试用户并登录,然后定义了测试用例。在test_get_success_url
中,我们使用self.client.post
方法模拟了一个POST请求,检查返回的状态码是否为302(重定向),并且检查重定向的URL是否正确。
在test_create_object
中,我们检查是否成功创建了一个对象,并且验证对象的字段值是否正确。
在test_authenticated_user_required
中,我们测试了未登录用户访问该视图时是否会被重定向到登录页面。
在test_template_used
中,我们检查视图是否使用了正确的模板。
最后,在test_form_valid
中,我们可以根据具体的业务逻辑编写其他的form_valid测试。
这些测试用例可以通过运行python manage.py test
命令来执行。如果所有的测试用例都通过了,就说明在Django的CreateView中的get_success_url方法被正确测试。
领取专属 10元无门槛券
手把手带您无忧上云