How to use sessions in Django unit tests
If you've tried using sessions with the Django test client as the official documentation describes, you'll have noticed that it doesn't work.
There are a couple bugs in the Django ticket system around this, the main one being https://code.djangoproject.com/ticket/10899, but there's been no movement on it for 8 months. However, that ticket has the code you need to get your sessions working.
So if you want to use sessions in your tests (e.g., to test whether a view is adding the right stuff to the session), add the following to the setUp() method of your test case:
def setUp(self):
from django.conf import settings
engine = import_module(settings.SESSION_ENGINE)
store = engine.SessionStore()
store.save() # we need to make load() work, or the cookie is worthless
self.client.cookies[settings.SESSION_COOKIE_NAME] = store.session_key
Now when you access self.client.session in your tests, it'll actually remember any changes made to it during the course of the test.