Две вещи - проверьте Factory Boy (для создания тестовых данных), и я бы посоветовал также проверить Pytest.Я думаю, что с неуправляемыми таблицами вы столкнетесь с проблемой (по крайней мере, по моему опыту) того, что django не создаст их в тестовой среде, и вы столкнетесь с проблемами, потому что нет файла migration
длясоздать эти таблицы (так как они неуправляемые).Django запускает файлы migration
при создании тестовой среды.
С Pytest вы можете запускать с флагом --nomigrations
, который создает тестовую базу данных непосредственно из моделей (создавая таблицы, необходимые для ваших неуправляемых моделей).).
Если вы объедините Pytest и Factory Boy, у вас появится возможность настроить тестовые данные таким образом, чтобы они работали, как ожидалось, могли воспроизводиться и тестироваться без проблем.
Iна самом деле подходить к этому вот так (немного странно, но это работает с нашей сложной настройкой):
На моей модели:
class Meta(object):
db_table = 'my_custom_table'
managed = getattr(settings, 'UNDER_TEST', False)
Я создаю переменную UNDER_TEST
в settings.py
следующим образом:
# Create global variable that will tell if our application is under test
UNDER_TEST = (len(sys.argv) > 1 and sys.argv[1] == 'test')
Таким образом - когда приложение имеет значение UNDER_TEST
, модель помечается как управляемая (и Pytest создаст соответствующую таблицу БД).Затем FactoryBoy обрабатывает помещение всех моих тестовых данных в эту таблицу (либо в setUp
теста, либо в другом месте), чтобы я мог проверить его.
Это мое предложение - у других может быть что-то более ясное или более чистое.