Тестирование южных миграций в Джанго - PullRequest
6 голосов
/ 10 января 2012

Кто-нибудь знает способ проверки самой миграции после ее записи?Очень часто в моих DataMigrations я обнаруживал глупые тонкие ошибки, такие как True вместо False для значения по умолчанию, неправильные денормализации и т. Д.

Соглашение по умолчанию на юге - начинать миграции с чисел, поэтому вы не можете даже импортировать их без использования __import__.Кто-нибудь сталкивался с подобной проблемой?Как люди их решают?

Наиболее очевидный подход - это сохранить логику миграции в отдельном импортированном модуле и проверить ее, но это несколько неуклюже.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2012

Я наткнулся на ту же проблему.Так как я не нашел способа выполнить тестирование данных, я использовал утверждения для обнаружения поврежденных данных:

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

Хорошо, это немного неуклюже.Но, похоже, это работает.

[Edit] Подумав еще раз, я нашел гораздо лучшее решение: поместить тесты в сам 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
0 голосов
/ 10 января 2012

Я довольно новичок на юге, но несколько раз я использовал его, я также использовал модульные тесты, а затем ./manage.py test также выполнил миграцию, это уже нашло бы много ошибок.

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

...