Конфигурация тестовой базы данных Django для unittest
Я запускаю unittest с командой coverage, но испытываю проблемы с взаимодействием с тестовой базой данных. Вот мой фрагмент кода.
from django.test import TestCase
from myapp.models import Animal
class AnimalTestCase(TestCase):
databases = {'default', 'read_replica'}
def setUp(self):
Animal.objects.create(name="lion", sound="roar")
Animal.objects.create(name="cat", sound="meow")
def test_animals_can_speak(self):
"""Animals that can speak are correctly identified"""
all_animals = Animal.objects.all()
print(all_animals)
Если я запускаю этот код и пытаюсь вывести всех животных в базе данных, он выводит только животных в реальной базе данных и не выводит таких животных, как лев и кошка. Я думаю, что это может быть связано с конфигурацией базы данных.
Я попытался использовать эту конфигурацию в settings.py.
from django.test import override_settings
@override_settings(DATABASES={
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": "db.sqlite3",
"TEST": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": "test_db.sqlite3",
}
},
"read_replica": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": "db.sqlite3",
"TEST": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": "test_db.sqlite3",
}
},
})
но это все еще не работает. Я рассчитываю взаимодействовать с тестовой базой данных, поэтому, основываясь на фрагменте кода, я хочу вывести льва и кошку.
Я полагаю, что Django сам создаст тестовую базу данных на основе миграций. Пожалуйста, взгляните на это, https://docs.djangoproject.com/en/5.0/topics/testing/overview/#the-test-database
Также override_settings
является декоратором, https://docs.djangoproject.com/en/5.0/topics/testing/tools/#django.test.override_settings