2015-11-26 3 views
2

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

'default': { #'sqlite': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
     'OPTIONS':{ 
      'timeout': 180, 
     }, 
     # 'TEST':{ 
     #  'MIRROR': 'default', 
     # 
     # } 


    }, 
'replica': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
     'OPTIONS':{ 
      'timeout': 180, 
     }, 
     'TEST_MIRROR': 'default' 


    } 

мои тесты:

data_school = DataSchool.objects.all() 
self.assertTrue(data_school.exists()) 

Я смущен, что test_mirrors настроенного администратор базы данных как для чтения копия database.and по умолчанию в теории какие-либо данные в базе данных по умолчанию должны быть доступны для тестирования? Если у меня есть какие-либо ошибки конфигурации, сообщите об этом. Благодаря

+0

+1 та же проблема - записи, созданные в «по умолчанию» БД не найден в «репликой» БД, несмотря на настройки «TEST_MIRROR» или «TEST»: { «MIRROR»: «по умолчанию»} будучи установленной для настроек «replica» db –

+0

FWIW это, кажется, ошибка в Django: https://code.djangoproject.com/ticket/23718 –

ответ

3

Это известная ошибка в Django: https://code.djangoproject.com/ticket/23718

Обходной описано в этом билете является лучшим выбором. Я столкнулся с этой же проблемой и применил обходной путь, определив собственный класс TestCase и наследовав из этого пользовательского тестового примера во всех моих тестах. Я также решил использовать setUpClass и tearDownClass вместо setUp и tearDown, как описано в билете на ошибку. Либо должно работать, хотя.

from django.db import connections 

class CustomTestCase(TestCase): 

    @classmethod 
    def setUpClass(cls): 
     super(CustomTestCase, cls).setUpClass() 
     connections['replica']._orig_cursor = connections['replica'].cursor 
     connections['replica'].cursor = connections['default'].cursor 

    @classmethod 
    def tearDownClass(cls): 
     connections['replica'].cursor = connections['replica']._orig_cursor 
     super(CustomTestCase, cls).tearDownClass() 
Смежные вопросы