Встречается на собеседованиях • сегодня

Как протестировать миграцию

Для тестирования миграции в Django можно использовать следующие подходы:

  1. Тестирование применения миграции:
python
from django.test import TestCase, modify_settings
from django.db.migrations.executor import MigrationExecutor
from django.db import connection

class MigrationTestCase(TestCase):
    @property
    def app(self):
        return 'your_app_name'

    migrate_from = None
    migrate_to = None

    def setUp(self):
        executor = MigrationExecutor(connection)
        old_apps = executor.loader.project_state(self.migrate_from).apps
        executor.migrate(self.migrate_from)
        
        # Сохраняем старое состояние
        self.setUpBeforeMigration(old_apps)
        
        # Применяем миграцию
        executor = MigrationExecutor(connection)
        executor.loader.build_graph()
        executor.migrate(self.migrate_to)
        
        self.apps = executor.loader.project_state(self.migrate_to).apps
text
def setUpBeforeMigration(self, apps):
    pass
text

2. **Проверка обратной миграции**:
```python
def test_reverse_migration(self):
    executor = MigrationExecutor(connection)
    executor.migrate(self.migrate_to)
    executor.migrate(self.migrate_from)
  1. Проверка схемы БД:
python
from django.db import connection

def test_schema_changes(self):
    with connection.cursor() as cursor:
        cursor.execute("SELECT * FROM your_table")
        columns = [col[0] for col in cursor.description]
        self.assertIn('new_column', columns)
  1. Тестирование данных:
python
def test_data_migration(self):
    OldModel = self.old_apps.get_model('app', 'Model')
    NewModel = self.apps.get_model('app', 'Model')
    self.assertEqual(NewModel.objects.count(), OldModel.objects.count())

Для pytest можно использовать фикстуру django_db_modify_db_settings.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы