django - 当视图实际工作时,为什么我的 Django 测试失败了?
问题描述
我有一个基于类的视图,可以在浏览器中按设计工作。我正在尝试为视图编写单元测试,但它们一直失败。我想知道为什么。视图(UserPassesTest 是用户是否是超级用户):
class EditUserView(LoginRequiredMixin, UserPassesTestMixin, TemplateView):
"""handles get and post for adding a new AEUser"""
template_name = 'editUser.html'
title = 'Edit User'
def get(self, request, *args, **kwargs):
"""handles the GET"""
post_url = reverse('edit_user', args=[kwargs['user_id']])
usr = get_object_or_404(AEUser, pk=kwargs['user_id'])
form = EditUserForm(initial={'is_active':usr.is_active, 'is_superuser':usr.is_superuser}, \
user=usr, request=request)
return render(request, self.template_name, \
{'title_text':self.title, 'post_url':post_url, 'form':form})
测试用例:
class TestEditUser(TestCase):
"""test the AddUser view"""
@classmethod
def setUpTestData(cls):
cls.user = AEUser.objects.create_user(username='shawn', email='shawn@gmail.com', password='test')
cls.user.is_superuser = True
cls.user.save()
def setUp(self):
self.client = Client()
def test_get(self):
"""tests the GET"""
self.client.login(username=self.user.username, password=self.user.password)
get_url = reverse('edit_user', args=[self.user.id])
response = self.client.get(get_url, follow=True)
self.assertEqual(self.user.is_superuser, True)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'editUser.html')
我在测试用例中有 3 个断言。如果我注释掉最后两个,并且只断言用户是超级用户,则测试通过。但是,无论出于何种原因,在其他两个断言上,我都失败了。我收到的错误是:
AssertionError: False is not true : Template 'editUser.html' was not a template used to render the response. Actual template(s) used: 404.html, base.html
,这让我相信 get_object_or_404 调用是触发失败的原因。这个测试用例我哪里出错了?谢谢!
解决方案
测试应该是:
class TestEditUser(TestCase):
"""test the AddUser view"""
@classmethod
def setUpTestData(cls):
cls.user = AEUser.objects.create_user(username='shawn', email='shawn@gmail.com', password='test')
cls.user.is_superuser = True
cls.user.save()
def setUp(self):
self.client = Client()
def test_get(self):
"""tests the GET"""
self.client.login(username=self.user.username, password='test')
get_url = reverse('edit_user', args=[self.user.id])
response = self.client.get(get_url, follow=True)
self.assertEqual(self.user.is_superuser, True)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'editUser.html')
推荐阅读
- c# - 为用户设置转发电子邮件地址
- youtube-api - 使用 youtube api 到 youtube 直播的网络摄像头
- azure - 升级到 Azure DevOps Server 2019 和发布管道失败并出现 VssServiceResponseException Page Not Found 错误
- asp.net-core - 如何使用相同 HTTP 动词(和查询参数)的多个控制器方法配置模型绑定?
- performance - clojure - :refer vs :as
- google-apps-script - 在 Google 表格中找不到方法 getRange(int,int)
- web-scraping - Apify 中请求之间的延迟
- python - 无法通过双击打开 Python 3.x 图形
- java - 如何使用自定义命令制作命令行界面?
- python - 如何在我的图中将相同的图例(标签)设置为不同的散点?