Тестовая база данных не пуста после запуска ./manage test --keepdb - PullRequest
0 голосов
/ 15 мая 2019

Вот минимальный пример теста, который я пытаюсь запустить

from django.contrib.auth import get_user_model
from django.test import TestCase

User = get_user_model()

class UserTests(TestCase):
    # def tearDown(self):
    #     User.objects.all().delete()

    def test_user(self):
        User.objects.create(username='testuser')

В первый раз все работает нормально. Но второй раз выдает

...lib/python3.7/site-packages/MySQLdb/connections.py", line 224, in query
    _mysql.connection.query(self, query)
django.db.utils.IntegrityError: (1062, "Duplicate entry 'testuser' for key 'username'")

Запись из предыдущего запуска все еще находится в базе данных, следовательно, ошибка повторяющейся записи. Я думал, что использование django.test.TestCase (в отличие от unittest.TestCase) очищает тестовую базу данных каждый раз, когда она запускается? Проблема исчезнет, ​​если я раскомментирую функцию tearDown. В конце концов, включить все модели в tearDown не составляет большого труда, но, тем не менее, я удивляюсь, почему это необходимо.

Вот мои настройки базы данных:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'materials',
        'USER': config('DB_USER', default=''),
        'PASSWORD': config('DB_PASSWORD', default=''),
        'HOST': 'localhost',
        'PORT': '',
    }
}

Запоминающее устройство - Ария.

...