是否有人编写过单元测试来验证他们的Django应用程序中是否存在未经生成的迁移?我认为应该看起来像:
python manage.py makemigrations
"no migrations were found"
如果没有,我将写一个,以便我们的构建失败。
答案 0 :(得分:2)
我会使用--dry-run flag并测试它是空的。
答案 1 :(得分:1)
这应该可以解决问题 - 没有刮擦。
它将显示迁移的名称,但如果有疑问,您仍需要在调试器中查看changes
。
class MigrationsCheck(TestCase):
def setUp(self):
from django.utils import translation
self.saved_locale = translation.get_language()
translation.deactivate_all()
def tearDown(self):
if self.saved_locale is not None:
from django.utils import translation
translation.activate(self.saved_locale)
def test_missing_migrations(self):
from django.db import connection
from django.apps.registry import apps
from django.db.migrations.executor import MigrationExecutor
executor = MigrationExecutor(connection)
from django.db.migrations.autodetector import MigrationAutodetector
from django.db.migrations.state import ProjectState
autodetector = MigrationAutodetector(
executor.loader.project_state(),
ProjectState.from_apps(apps),
)
changes = autodetector.changes(graph=executor.loader.graph)
self.assertEqual({}, changes)
答案 2 :(得分:1)
自Django 1.10起,makemigrations
管理命令包含--check
选项。如果缺少迁移,该命令将以非零状态退出。
用法示例:
./manage.py makemigrations --check --dry-run
文档:
https://docs.djangoproject.com/en/2.0/ref/django-admin/#cmdoption-makemigrations-check
答案 3 :(得分:0)
你可以从https://github.com/django/django/blob/master/django/core/management/commands/makemigrations.py#L68窃取一些代码。迁移到较新的django版本可能需要额外的5分钟