Provide a way to override Django's settings when running tests
Project description
django-override-settings provides an easy way to override settings in Django tests.
The override_settings class can be used as either a class or method decorator or as a context manager to temporarily override the values of settings. After each test case has finished (when using it as a decorator) or after the context manager has exited, it resets the values in django.conf.settings to what they were before. This prevents side-effects from creeping in and lets each test case run in its own sandbox.
This package also provides two convenience functions (with_apps and without_apps) to modify just INSTALLED_APPS as well as a special object (SETTING_DELETED) to run tests without a given setting defined.
The functionality in this package will eventually be superseded when Django 1.4 is released as it will come with a built-in override_settings. But for those maintaining pre-1.4 codebases, hopefully this package comes in handy.
Installation
We’re on PyPI:
pip install django-override-settings
Usage
If you have a bunch of tests that require a given setting, you can decorate the class and each test case will use that value. For example:
from django.conf import settings from django.test import TestCase from override_settings import override_settings @override_settings(FOO="abc") class TestFoo(TestCase): def test_foo(self): self.assertEqual(settings.FOO, "abc")
Or you can decorate a single test case and have it only apply on that method:
@override_settings(BAR="123") class TestBar(TestCase): @override_settings(BAR="abc") def test_bar(self): self.assertEqual(settings.BAR, "abc") def test_bar_no_decoration(self): self.assertEqual(settings.BAR, "123")
You can also use it as a context manager:
class TestBar(TestCase): @override_settings(BAR="123") def test_bar(self): self.assertEqual(settings.BAR, "123") with override_settings(BAR="abc") self.assertEqual(settings.BAR, "abc") self.assertEqual(settings.BAR, "123")
To modify just INSTALLED_APPS, use with_apps or without_apps:
from override_settings import with_apps, without_apps class TestAppModifiers(TestCase): @with_apps('django.contrib.humanize') def test_humanize(self): # ... @without_apps('django.contrib.sites') def test_no_sites(self): # ...
To run tests without a setting, use SETTING_DELETED:
from override_settings import override_settings, SETTING_DELETED class TestMissingSetting(TestCase): @override_settings(CUSTOM_OPTION=SETTING_DELETED) def test_delete_custom_option(self): """ Useful to make sure a missing setting raises an Exception. """ self.assertRaises(AttributeError, getattr, settings, 'CUSTOM_OPTION')
Requirements
Django >= 1.2
Thanks
Jannis Leidel for both the original snippet and his work updating it to work when decorating TestCases as part of Django proper.
Joost Cassee for the idea of SETTING_DELETED as well as with_apps and without_apps as part of his django-analytical project.
Contact
If you notice any bugs, please open a ticket.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file django-override-settings-1.2.tar.gz
.
File metadata
- Download URL: django-override-settings-1.2.tar.gz
- Upload date:
- Size: 4.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 375f0d86c199436054a22e7933fc0e9e59affb6dc8fea0a726de3850aa1d9de8 |
|
MD5 | f1becffe14c6645e049c321bf119edb7 |
|
BLAKE2b-256 | e26f63f10bab3d1435c2848f1b3a3c91c9bfd40f627ad95bb3c1a81040478fc8 |