Django测试出现AssertionError:404≠200,请求排查解决方法
问题原因
你的about视图是DetailView,它需要从数据库中获取对应pk的JobsModel对象才能返回200响应。但测试时你直接请求了pk=1的地址,而测试数据库是空的,没有这个对象,所以返回404。
解决方案
在测试的setUp方法中创建一个JobsModel实例,并用这个实例的pk生成测试用的URL:
修改后的测试代码:
class TestViews(TestCase): def setUp(self): self.client = Client() self.list_url = reverse('home') # 创建一个JobsModel实例,根据你的模型字段补充必填属性 self.test_job = JobsModel.objects.create( title="测试职位", description="测试职位描述" # 其他必填字段都需要在这里填写 ) # 使用实例的真实pk生成about_url self.about_url = reverse('about', args=[self.test_job.pk]) def test_index(self): response = self.client.get(self.list_url) self.assertEquals(response.status_code, 200) self.assertTemplateUsed(response, 'job_app/index.html') def test_about(self): response = self.client.get(self.about_url) self.assertEquals(response.status_code, 200) self.assertTemplateUsed(response, 'job_app/about.html')
关键说明
JobsModel.objects.create(...):在测试专属的数据库中创建真实的对象,确保DetailView能找到对应数据,必须补充模型中所有必填的字段。- 用
self.test_job.pk代替硬编码的1:避免因测试环境中实例pk变化(比如多次运行测试导致pk递增)引发的测试失败,让测试逻辑更健壮。
内容的提问来源于stack exchange,提问作者Fit
相关产品推荐
相关产品推荐

