代码之家  ›  专栏  ›  技术社区  ›  Todd Drinkwater

Django TestCase在测试完成运行后不销毁测试数据

  •  1
  • Todd Drinkwater  · 技术社区  · 6 年前

    我目前正在为一个应用程序编写我的第一个Django规范。但是,每次运行测试时,我都会收到 IntegrityError: UNIQUE constraint failed: auth_user.username 由于我在上一次运行测试时创建的用户现在存在于数据库中。

    我的印象是TestCase将测试代码封装在数据库事务中,以便在测试期间创建的所有数据在完成时回滚?我做错什么了?

    from django.test import TestCase
    
    from django.contrib.auth.models import User
    from basic.models import SavedModels
    
    # Create your tests here.
    class SavedModelsTestCase(TestCase):
        User.objects.create(username="user_001",
                            password="useruser",
                            first_name="Test",
                            last_name="User",
                            email="test_user@test.com"
                            )
    
        user = User.objects.filter(username="user_001")
        saved_model = SavedModels.objects.create(name="Test Model",
                                                 description="A model",
                                                 user=user
                                                )
    
        def test_saved_models(self):
            saved_model = create_saved_model()
            self.assertTrue(isinstance(saved_model, SavedModels))
            self.assertEqual(saved_model.name, "Test Model")
            self.assertEqual(saved_model.description, "A model")
            self.assertEqual(saved_model.user, user)
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   gagan trivedi    6 年前

    它不是那样工作的,你需要两个名为setup的函数来设置所需的数据(它在测试开始时运行),你需要在这里创建你的用户,然后tearDown(它在测试结束时运行)在运行测试后进行清理在添加这两个函数之后,你的代码会变成这样

    class SavedModelsTestCase(TestCase):
    
       def setUp(self):
           #create your user here
        def tearDown(self):
           # for any clenaup required none in your case
    
        def test_saved_models(self):
            saved_model = create_saved_model()
            self.assertTrue(isinstance(saved_model, SavedModels))
            self.assertEqual(saved_model.name, "Test Model")
            self.assertEqual(saved_model.description, "A model")
            self.assertEqual(saved_model.user, user)