使用完全独立于项目的设置进行测试

时间:2012-05-01 15:48:06

标签: django django-testing django-settings

我正在尝试测试在初始化期间创建一些自定义权限的应用。这些是在数据库创建后立即创建的:

custom_permissions = getattr(settings,'SOMEAPP_PERMISSIONS',() )

def create_custom_permissions(sender, **kwargs):
    ct, created = ContentType.objects.get_or_create(model = '',
                                                    app_label = 'some_app',
                                                    defaults = {'name':'some_app'})

    for codename, name in custom_permissions: 
        perm = Permission.objects.get_or_create(codename = codename,
                                         content_type__pk = ct.id,
                                         name = name)

post_save.connect(create_custom_permissions, Permission)

我可以找到的覆盖设置的所有讨论都与override_settingswith self.settings等有些相关。但是当我在TestCase中覆盖设置时,我的函数已经运行了,当然,更改设置没有任何效果:

@override_settings(SOMEAPP_PERMISSIONS = (('some_custom_permission','No Name'))
class TestCustomPermissions(TestCase):

    fixtures = ['some_app_user_fixture.json']
    urls = 'some_app.tests.test_urls'

    def test_create_point_privileges(self):
        """ check if all necessary privileges have been created """
        Permission.objects.get(codename = 'some_custom_permission')

因此我的所有测试都失败了。现在我如何使用设置文件来测试这个特殊功能,它与创建数据库有关?

1 个答案:

答案 0 :(得分:1)

从一个Django项目到另一个项目你会看到的是你将有一个单独的设置模块提供测试配置/覆盖:

# project/settings.py
SOMEAPP_PERMISSIONS = (
    'foo', 'bar'
)

# project/test.py
from project.settings import *

SOMEAPP_PERMISSIONS = (
    'bar', 'baz'
)

您现在需要做的就是在运行管理命令时提供设置选项:python ./manage.py test --settings=project.test。这是简单,有效和自我记录。