Django uses a
from django.conf import settings configuration mechanism,
which makes it hard to test. The settings object is global. You have to do set
a setting and revert the change at the end of a test; quite messy.
You can do a bit better, in such a situation, by using the excellent mock library. But even mock is defeated sometimes by Django’s settings. I tried a couple of variants like the following and failed to change the settings:
import mock class XYZTest(TestCase) @mock.patch('django.conf.settings.DEBUG', False) def test_xyz(self): # ... # Well, I'm importing settings in my views module... @mock.patch('my_app.views.settings.DEBUG', False) def test_xyz2(self): # ...
After some googling I discovered something I totally missed. Django 1.4 has something real useful. The @override_settings decorator. Does exactly what I want it to do:
from django.test.utils import override_settings ... class XYZTest(TestCase) @override_settings(DEBUG=False) def test_xyz(self): # ...
My name is Reinout van Rees and I work a lot with Python (programming language) and Django (website framework). I live in The Netherlands and I'm happily married to Annie van Rees-Kooiman.
Most of my website content is in my weblog. You can keep up to date by subscribing to the automatic feeds (for instance with Google reader):