0

初期化中にいくつかのカスタム アクセス許可を作成するアプリをテストしようとしています。これらは、データベースの作成直後に作成されます。

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')

したがって、すべてのテストが失敗します。この特別な機能をテストするためだけに設定ファイルを使用するにはどうすればよいですか?それはデータベースの作成に関係していますか?

4

1 に答える 1

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. シンプルで効果的で、自己文書化されています。

于 2012-05-01T16:07:14.367 に答える