【发布时间】:2016-08-27 10:48:10
【问题描述】:
我有 5 个遗留数据库的 django 应用程序。几乎所有模型都设置了元属性managed=False。由于设置了managed=False,因此已使用选项managed=False 创建了每个模型的迁移。而且,由于 django 测试运行程序为每个模型选择现有迁移以在 test_databases 中创建测试表,因此它根本不会创建任何东西。
我尝试使用以下解决方法创建test.py 设置文件:
from web_services.settings.dev import *
from django.test.runner import DiscoverRunner
class UnManagedModelTestRunner(DiscoverRunner):
def setup_test_environment(self, *args, **kwargs):
from django.apps import apps
self.unmanaged_models = [m for m in apps.get_models() if not m._meta.managed]
for m in self.unmanaged_models:
m._meta.managed = True
super(UnManagedModelTestRunner, self).setup_test_environment(*args, **kwargs)
def teardown_test_environment(self, *args, **kwargs):
super(UnManagedModelTestRunner, self).teardown_test_environment(*args, **kwargs)
# reset unmanaged models
for m in self.unmanaged_models:
m._meta.managed = False
TEST_RUNNER = 'web_services.settings.test.UnManagedModelTestRunner'
并运行python manage.py test --settings=web_services.settings.test。但是,它并没有帮助,因为无论如何 - 已经使用 managed=False 选项创建了现有迁移。只有在我在模型中注释掉 managed=False、删除旧迁移、创建新迁移(没有 managed=False 选项)之后,测试似乎才有效。
有了这个,我很迷茫 - 在我的案例(多个旧数据库)中编写测试实际上是一个好习惯吗?处理调整迁移的麻烦似乎是错误的。
【问题讨论】:
标签: django django-testing django-tests