我正在尝试移植我的项目以使用 Django 1.7。一切都很好,除了 1 件事。测试文件夹中的模型。
Django 1.7 新迁移在内部运行 migrate 命令。在运行 syncdb 之前。这意味着如果模型不包含在迁移中 - 它不会填充到数据库(也不会填充到测试数据库)。这正是我现在正在经历的。
我要做的是:
在我的/app/tests/models.py
我有虚拟模型:class TestBaseImage(BaseImage): pass
它所做的只是从抽象 BaseImage
模型继承。
然后在测试中我创建该虚拟模型的实例来测试它。
问题是它不再起作用了。它不包含在迁移中(这很明显,因为我不想将我的测试模型保留在生产数据库中)。运行我的测试会导致数据库错误说table does not exist
。这是有道理的,因为它不包含在迁移中。
有没有办法让它与新的迁移系统一起工作?我找不到“修复”它的方法。
我使用的代码:
应用程序/测试/models.py
from ..models import BaseImage
class TestBaseImage(BaseImage):
"""Dummy model just to test BaseImage abstract class"""
pass
应用程序/模型.py
class BaseImage(models.Model):
# ... fields ...
class Meta:
abstract = True
工厂:
class BaseImageFactory(factory.django.DjangoModelFactory):
"""Factory class for Vessel model"""
FACTORY_FOR = BaseImage
ABSTRACT_FACTORY = True
class PortImageFactory(BaseImageFactory):
FACTORY_FOR = PortImage
示例测试:
def get_model_field(model, field_name):
"""Returns field instance"""
return model._meta.get_field_by_name(field_name)[0]
def test_owner_field(self):
"""Tests owner field"""
field = get_model_field(BaseImage, "owner")
self.assertIsInstance(field, models.ForeignKey)
self.assertEqual(field.rel.to, get_user_model())