Вот две строки кода я пытаюсь охватить с тестами:Django входа тесты сессии проблемы
from django.contrib.auth import login
from django.views.generic.edit import FormView
from accounts.forms import UsernameLoginForm
class LoginView(FormView):
form_class = UsernameLoginForm
success_url = '/'
template_name = 'login.html'
def form_valid(self, form):
login(self.request, form.get_user())
return super(LoginView, self).form_valid(form)
Это кажется правильным способом функционально реализовать форму входа простиралась от django.contrib. auth.forms.AuthenticationForm, но мне пришлось выкопать код из самого входа в систему администратора, чтобы он нуждался в достойном тестировании.
У меня возникли проблемы с получением тестовой среды для установки пользователя на сеанс. RequestFactory не имеет поддержки сеанса, так это то, что я пробовал:
from django.contrib.auth.models import User
from django.test import TestCase
from django.test.client import RequestFactory
import mox
from accounts.forms import UsernameLoginForm
from accounts.views import LoginView
class ViewTests(TestCase):
def test_login(self):
user = User.objects.create(username='userfoo')
view = LoginView()
# request = RequestFactory()
view.request = self.client
self.moxx = mox.Mox()
form = self.moxx.CreateMock(UsernameLoginForm)
form.get_user().AndReturn(user)
self.moxx.ReplayAll()
view.form_valid(form)
self.moxx.VerifyAll()
self.assertTrue(request.user)
И это ошибка, которая вызывает:
File "/home/renoc/.virtualenvs/alc/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 110, in login
request.session.cycle_key()
File "/home/renoc/.virtualenvs/alc/local/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py", line 283, in cycle_key
data = self._session_cache
AttributeError: 'SessionStore' object has no attribute '_session_cache'
self.client.request.session изменчива, и если я пытаюсь установить атрибут на нем не вызывает ошибок, но при этом не имеет атрибута.