Тестирование южных миграций в Джанго
Кто-нибудь знает способ проверить саму миграцию после ее написания? Очень часто в моих DataMigrations я обнаруживал глупые тонкие ошибки, вроде True
вместо False
для значения по умолчанию, неправильной денормализации и т. д.
Соглашение по умолчанию на юге состоит в том, чтобы начать миграцию с чисел, поэтому вы даже не сможете импортировать их без использования __import__
, Кто-нибудь сталкивался с подобной проблемой? Как люди их решают?
Наиболее очевидный подход заключается в том, чтобы сохранить логику миграции в отдельном импортированном модуле и проверить ее, но это несколько неуклюже.
2 ответа
Я наткнулся на ту же проблему. Так как я не нашел способа выполнить тестирование данных, я использовал утверждения для обнаружения поврежденных данных:
from django.conf import settings
class MyModel(models.Model):
stupid_error = models.BooleanField(default=False)
def __init__(self, *args, **kwargs):
super(MyModel, self).__init__(*args, **kwargs)
if settings.DEBUG:
assert not self.stupid_error
Хорошо, это немного неуклюже. Но это похоже на работу.
[Править] Подумав еще раз, я нашел гораздо лучшее решение: поместить тесты в саму DataMigration. Поскольку миграция является одноразовым кодом, ее не нужно проверять снова и снова.
class Migration(DataMigration):
def forwards(self, orm):
# lots of awesome migration code here
# ...
for m in orm.MyModel.objects.all():
assert not m.stupid_error
Я довольно новичок в Саут, но несколько раз я использовал его, я также использовал модульные тесты, а затем, ./manage.py test
выполнил миграцию также, это уже нашло бы много ошибок.
Однако, это, вероятно, не работает во всех случаях (я думаю, что нет данных в тестовой базе данных, когда выполняются эти миграции).