Вот минимальный пример теста, который я пытаюсь запустить
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': '',
}
}
Запоминающее устройство - Ария.