Конфигурация тестовой базы данных 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

Вернуться на верх