from django.core.management import call_command from django.db.models import loading from django.test import TestCase from django.test.utils import override_settings class CustomSettingsTestCase(TestCase): """ A TestCase which makes extra models available in the Django project, just for testing. Based on http://djangosnippets.org/snippets/1011/ in Django 1.4 style. """ new_settings = {} _override = None @classmethod def setUpClass(cls): cls._override = override_settings(**cls.new_settings) cls._override.enable() if 'INSTALLED_APPS' in cls.new_settings: cls.syncdb() @classmethod def tearDownClass(cls): cls._override.disable() if 'INSTALLED_APPS' in cls.new_settings: cls.syncdb() @classmethod def syncdb(cls): loading.cache.loaded = False call_command('syncdb', verbosity=0)