2010-11-12 2 views
3

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

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

Когда я запускаю тесты, которые я получаю ошибку,

«KeyError:„SUPPORTS_TRANSACTIONS“»

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

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

ответ

3

yes У меня была аналогичная проблема ... мое исправление заключалось в том, чтобы установить «SUPPORTS_TRANSACTIONS»: True для каждого соединения с базой данных в файле настроек. Не уверен, что это правильный способ исправить, но это сработало для меня.

+0

Это не помогает мне. – pranjal

+0

Работает для меня. Отредактировав мои настройки/local.py и добавив «SUPPORTS_TRANSACTIONS»: True, «к единственной записи по умолчанию в моем словаре DATABASES. –

0

'SUPPORTS_TRANSACTIONS': Истинный тоже работал для меня. Тем не менее, у меня есть своего рода странная множественная настройка db с использованием маршрутизаторов баз данных. @ user298404: Как выглядит ваша множественная установка db?

пс. Прости; не достаточное количество баллов для комментариев ...

0

Здесь кратна установка дб, что я в настоящее время в производстве:

DATABASES = { 
    # 'default' is used as the WRITE (master) connection 
    DB_PRIMARY_MASTER: { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'main', 
     'USER': 'main_write', 
     'PASSWORD': 'XXXX', 
     'HOST': 'db-master', 
     'PORT': '3306', 
     'SUPPORTS_TRANSACTIONS': True, 
    }, 

    # Slave connections are READONLY 
    DB_PRIMARY_SLAVE: { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'main', 
     'USER': 'main_read', 
     'PASSWORD': 'XXXX', 
     'HOST': 'db-slave', 
     'PORT': '3306', 
     'TEST_MIRROR': DB_PRIMARY_MASTER, 
     'SUPPORTS_TRANSACTIONS': True, 
    }, 

    # 'mail_default' is used as the WRITE (master) connection for the mail database 
    DB_MAIL_MASTER: { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'dbmail', 
     'USER': 'dbmail_write', 
     'PASSWORD': 'XXXX', 
     'HOST': 'db-mail-master', 
     'PORT': '3306', 
     'SUPPORTS_TRANSACTIONS': True, 
    }, 

    # Slave connections are READONLY 
    DB_MAIL_SLAVE: { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'dbmail', 
     'USER': 'dbmail_read', 
     'PASSWORD': 'XXXX', 
     'HOST': 'db-mail-slave', 
     'PORT': '3306', 
     'TEST_MIRROR': DB_MAIL_MASTER, 
     'SUPPORTS_TRANSACTIONS': True, 
    }, 
} 

DB_PRIMARY_MASTER, DB_PRIMARY_SLAVE, DB_MAIL_MASTER и DB_MAIL_SLAVE являются все строковые константы, так что они могут быть использованы в моем маршрутизаторе базы данных.
Подсказка: DB_PRIMARY_MASTER = 'default'

Надеюсь, это поможет!

2

Я понимаю, что это довольно старая нить, но я столкнулся с ним с той же проблемой, и моя решимость добавлял multi_db = True флаг моей TestCase, например:

class TestThingWithMultipleDatabases(TestCase): 
    multi_db = True 

    def test_thing(self): 
     pass 

Источник https://github.com/django/django/blob/master/django/test/testcases.py#L861

Это приводит к тому Джанго вызвать flush на всех базах данных (или откат, если они поддерживают транзакции)

Я тоже с помощью БД маршрутизатору

Боюсь, я не могу найти это в документации Django, поэтому нет ссылки для этого

+0

Django docs: https://docs.djangoproject.com/en/2.0/topics/testing/tools/#multi-database-support – pymen

Смежные вопросы