Django TestCase не уничтожает тестовые данные после завершения тестов - PullRequest
0 голосов
/ 12 сентября 2018

Я сейчас пытаюсь написать свои первые спецификации 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 Ответ

0 голосов
/ 12 сентября 2018

это не работает так, вам нужны две функции с именем 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)
...