Access Django Тестовая база данных - PullRequest
0 голосов
/ 16 января 2020

У меня работает API на Heroku, и я хотел бы иметь возможность протестировать его с помощью тестовой базы данных. У меня проблема в том, что метод TestCase setUp (self) добавляет данные в автоматически созданную тестовую базу данных. Затем мои тесты отправляют запрос POST на локально работающую версию самого себя. Тогда этот код просто использует обычную базу данных по умолчанию вместо тестовой базы данных, в которой выполняются тесты.

Вот некоторый код и то, что я пробовал.

В моем основном файле settings.py я назвал мою базу данных примерно так:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'theOneTrueDB',
    }
}

И я прочитал здесь (https://docs.djangoproject.com/en/3.0/topics/testing/overview/#the -test-database ), что

Имена тестовых баз данных по умолчанию: созданный путем добавления test_ к значению каждого ИМЯ в БАЗАХ ДАННЫХ.

Поэтому я решил в своем файле представлений для одного из своих приложений, что я мог бы просто выполнить Tenant.objects.using ('test_theOneTrueDB'). () и это сработало бы, но там написано

django .db.utils.ConnectionDoesNotExist: соединение test_theOneTrueDB не существует

Я также пытался

Tenant.objects.using('test_default')

и многое другое. Я потерян. Я также согласился бы настроить другую базу данных, а затем использовать ее в настройках с

Tenant.objects.save(using='theOneTrueDBTest)

или чем-то в этом роде.

Любая помощь будет признательна!

РЕДАКТИРОВАТЬ: я знаю, мои настройки выглядят так

DATABASES = {
    'default': {
        'NAME': 'theOneTrueDB',
        'ENGINE': 'django.db.backends.sqlite3',
    },
    'other': {
        'NAME': 'theOneTrueTest',
        'ENGINE': 'django.db.backends.sqlite3',
    }
}

, но затем, если я пытаюсь сохранить в другой базе данных, как это

tempPM.save(using='other')

Затем я получаю эту ошибку

AssertionError: Запросы базы данных к «другому» не разрешены в этом тесте. Добавьте «other» в API.tests.TenantLogin.databases, чтобы обеспечить надлежащую изоляцию теста и отключить этот сбой.

1 Ответ

0 голосов
/ 16 января 2020

Вам не нужно напрямую обращаться к тестовой базе данных. Он будет использоваться по умолчанию, и вам не нужно об этом беспокоиться.

По умолчанию для базы данных sqlite3 будет использоваться база данных в памяти, с именем, подобным этому file:memorydb_default?mode=memory&cache=shared, вы можете проверить настройки во время выполнения тестов через:

from django.conf import settings
print(settings.DATABASES)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...