Django视图测试报错:TestInformLogin对象无clinet属性求助
解决Django测试中的AttributeError问题
你遇到的问题有两个核心原因,对应以下修复步骤:
1. 修正测试初始化方法的命名
Django的TestCase类规定,测试用例执行前的初始化逻辑必须放在**setUp**方法中(驼峰写法,首字母小写s,大写U)。你自定义的set_up_create_user是普通方法,测试框架不会自动调用它,导致self.client等属性根本没被初始化。
2. 修正拼写错误
代码里把client拼成了clinet(少了一个i),不管是实例变量定义还是后续调用,都写错了单词,这直接导致找不到对应属性。
修正后的完整代码
from django.test import TestCase, Client from django.urls import reverse from KnowledgeManagement.models import Members, TblInform class TestInformLogin(TestCase): def setUp(self): self.user = Members.objects.create(username='testuser', nationalCode='1235', mobileNumber='094562', date_joined='2021-11-22') self.user.set_password('12345') self.user.save() self.client = Client() # 修正拼写错误 self.client.login(username='testuser', password='12345') self.inform_list_url = reverse('inform_list') # 建议在setUp中创建对应id的通知实例,避免测试时出现404 self.test_inform = TblInform.objects.create(id=1, ...) # 补充你的TblInform字段 self.edit_inform_url = reverse('edit_inform', args=[1]) def test_inform_list_GET(self): response = self.client.get(self.inform_list_url) # 修正拼写错误 self.assertEquals(response.status_code, 200) self.assertTemplateUsed(response, 'inform_list.html') def test_edit_inform_GET(self): response = self.client.get(self.edit_inform_url) # 修正拼写错误 self.assertEquals(response.status_code, 200) self.assertTemplateUsed(response, 'inform.html')
额外提醒:edit_inform的args=[1]需要数据库中存在id为1的TblInform实例,建议在setUp中创建对应的测试数据,否则测试可能会触发404错误。
内容的提问来源于stack exchange,提问作者user19617531
相关产品推荐
相关产品推荐

