2016-09-23 60 views
2

我最近在我正在开发的django项目中实现了一个可重用的应用程序。为了这个问题,我们称之为reusable_app。这个应用程序也有一些运行的单元测试,但是,这些测试取决于在model.py的测试旁边某处声明的一些基本模型。现在Django单测试迁移

/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): 
    ... 

如果reusable_app设置模块INSTALLED_APPS在未指定此仍产生ProgrammingError。我错过了什么,或者有另一种方法吗?

回答

2

我认为这里的问题是,测试运行人员在之前设置了表,您将该应用程序添加到@override_settings

正常情况下,我对可重复使用的应用程序所做的操作是在“示例”应用程序的上下文中运行测试,其中包含要测试的应用程序的设置。通常工作得很好,因为我正在分开包装可重用的应用程序。这是我过去的一个项目的example

但是,如果这不可行,您可以尝试在测试中覆盖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()