为了账号安全,请及时绑定邮箱和手机立即绑定

Django 测试正在使用 manage.py 测试应用程序,但不适用于 manage.py 测试

Django 测试正在使用 manage.py 测试应用程序,但不适用于 manage.py 测试

蓝山帝景 2022-01-05 10:26:52
我写了一个测试用例来检查我需要一个教师对象的视图。class ShowTeacherViewTest(TestCase):@classmethoddef setUpTestData(cls):    gender = Gender.objects.create(gender='Male')    gender_id = gender.id    Teacher.objects.create(            gender_id=gender_id,            first_name='Maria',            last_name='Santana',)def test_view_uses_correct_template(self):    teacher = Teacher.objects.first().id    response = self.client.get(reverse('get_student'), {'teacher': teacher})    self.assertEqual(response.status_code, 200)当我运行“manage.py test app”时,一切正常。如果我正在运行“manage.py test”,这个错误就会消失: self.model._meta.object_name students.gender.Gender.DoesNotExist: Gender matching query does not exist.由于一些外键,我也在其他模型测试中使用这些教师对象。那么,在每次测试之前是否有可能或需要重置 test_db?
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超8个赞

回溯显示此行失败:

gender_male = Gender.objects.get(pk=1)

您通常不应该在代码或测试中硬核主键。当您使用 运行所有测试时manage.py test,对象是使用不同的主键创建的,因此get(pk=1)失败。

如果您确实需要在代码中对 pk 进行硬编码,则需要在测试类中使用正确的 pk 创建对象:

gender = Gender.objects.create(pk=1, gender='Male')

但是,更好的解决方法是更改代码,使其不使用硬编码的 pk。

gender_male = Gender.objects.get(gender='Male')


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号