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

我写了一个测试用例来检查我需要一个教师对象的视图。


class ShowTeacherViewTest(TestCase):

@classmethod

def 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?


蓝山帝景
浏览 192回答 1
1回答

qq_遁去的一_1

回溯显示此行失败: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')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python