Тестирование южных миграций в Джанго

Кто-нибудь знает способ проверить саму миграцию после ее написания? Очень часто в моих 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 выполнил миграцию также, это уже нашло бы много ошибок.

Однако, это, вероятно, не работает во всех случаях (я думаю, что нет данных в тестовой базе данных, когда выполняются эти миграции).

Другие вопросы по тегам