У меня есть приложение django, в котором есть пара моделей, которые читают из таблиц в неуправляемой базе данных.
Я просто пытаюсь создать соответствующие тесты, чтобы убедиться, что приложение может быть протестировано как можно лучше. Я использую factory_boy для помощи в создании тестовых данных.
Одна из моих неуправляемых моделей выглядит так:
class EmpGroup(models.Model):
id = models.IntegerField(db_column='id', primary_key=True)
staff_group = models.ForeignKey(
StaffGroup,
db_column='staff_group_id',
on_delete=models.PROTECT
)
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
db_column='user_id',
on_delete=models.PROTECT
)
location = models.ForeignKey(
Location,
db_column='base_loc',
on_delete=models.PROTECT
)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
location_name = models.CharField(max_length=50)
def __str__(self):
return f'{self.last_name}, {self.first_name}'
class Meta(object):
managed = getattr(settings, 'UNDER_TEST', False)
db_table = 'control_v_empGroup'
Поскольку эта модель неуправляемая - нет миграции, чтобы сказать ей создать таблицу control_v_empGroup
при настройке тестовых БД. Поэтому, когда я запускаю свои тесты - я получаю сообщение об ошибке, что таблица не существует!
Моя EmpGroupFactory выглядит так:
class EmpGroupFactory(factory.django.DjangoModelFactory):
class Meta:
model = models.EmpGroup
id = 1
staff_group = factory.SubFactory(StaffGroupFactory)
user = factory.SubFactory(UserFactory)
location = factory.SubFactory(LocationFactory)
first_name = 'Test'
last_name = 'Grp'
location_name = 'Test'
В моих настройках у меня так:
UNDER_TEST = (len(sys.argv) > 1 and sys.argv[1] == 'test')
if UNDER_TEST:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'default-db.sqlite3'),
},
'camp': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'camp-db.sqlite3'),
},
}
else:
DATABASES =
# actual dbs for regular use
Я настроил UNDER_TEST
, чтобы можно было отличать базы данных во время тестирования от обычных баз данных в нетекстовых примерах. Тестовые базы данных SQLlite.
Есть ли способ заставить Django настроить таблицу для этой конкретной модели при тестировании, но не в другое время?
Как лучше всего тестировать неуправляемые модели?