Django单测试迁移



我最近在django项目中实现了一个可重用的应用程序。为了方便起见,我们叫它reusable_app。这个应用程序也有一些运行的单元测试,然而,这些测试依赖于在model.py中测试旁边声明的一些基本模型。

/resuable_app
    __init__.py
    models.py
    views.py
    urls.py
    /tests
        __init__.py
        tests.py
        /simple_app
            __init__.py
            models.py

现在,模型不会加载到数据库中,除非我在测试配置文件中指定INSTALLED_APPS中的文件夹。我想知道是否有另一种方法来实现这一点,而不必在设置文件中暴露应用程序?我似乎能够通过@override_settings指定应用程序,但没有运行迁移。

,

@override_settings(INSTALLED_APPS=['reusable_app'])
class TestReusableApp(TestCase):
def test_something(self):
     ...

如果在设置模块INSTALLED_APPS中没有指定reusable_app,这仍然会产生ProgrammingError。是我漏掉了什么,还是有别的方法?

我认为这里的问题是测试运行器在添加@override_settings应用程序之前设置了表

通常,我对可重用应用程序所做的是在一个"示例"应用程序的上下文中运行测试,设置包括你想要测试的应用程序。通常工作得很好,因为我将可重用的应用程序单独打包。以下是我过去一个项目中的一个例子。

但是,如果这是不可能的,您可以尝试在测试中覆盖setUp,并在该代码中调用"migrate"命令。例如:

from django.core.management import call_command
@override_settings(INSTALLED_APPS=['reusable_app'])
MyTestCase(TestCase):
    def setUp(self):
        call_command('migrate', 'reusable_app')

这有点乱,但可能值得一试。根据实际情况,您可能还需要运行django.setup()

最新更新