Мы изменили нашу базу данных, используя миграции django (django v1.7+). Данные, существующие в базе данных, больше недействительны.
По сути, я хочу протестировать миграцию, создав в модульном тесте базу данных перед миграцией, добавив некоторые данные, применив миграцию, а затем подтвердив, что все прошло гладко.
Как один:
сдерживать новую миграцию при загрузке модульного теста
Я нашел кое-что о переопределении
settings.MIGRATION_MODULES
, но не смог не понять, как его использовать. Когда я проверяюexecutor.loader.applied_migrations
, он все еще перечисляет все. Единственный способ предотвратить новую миграцию — удалить файл; не решение, которое я могу использовать.создать запись в базе данных unittest (используя старую модель)
Если мы сможем предотвратить миграцию, то это должно быть довольно просто.
myModel.object.create(...)
применить миграцию
Я думаю, что теперь я могу решить это, когда нашел test_executor: установить план, указывающий на файл миграции, и выполнить его? Эм, верно? Есть код для этого :-D
подтвердите, что старые данные в базе данных теперь соответствуют новой модели
Опять же, я ожидаю, что это должно быть довольно просто: просто выберите экземпляр, созданный до миграции, и подтвердите, что он изменился всеми правильными способами.
Таким образом, проблема на самом деле заключается в том, чтобы решить, как предотвратить применение модульным тестом последнего сценария миграции, а затем применить его, когда мы будем готовы?
Может у меня неправильный подход? Должен ли я создавать фикстуры и просто подтверждать, что в конце они все хороши? Фикстуры загружаются до применения миграций или после их завершения?
Используя MigrationExecutor
и выбирая определенные миграции с помощью .migrate
, я смог, может быть?, откатить его до определенного состояния, а затем выполнить откат вперед один за другим. Но это вызывает сомнения; в настоящее время преследует sqlite, выдумывая из-за отсутствия фактической инструкции ALTER TABLE. Жюри еще нет.