Я пытаюсь создать тест для представления, это украшено @login_required, так как мне не удалось заставить его работать, я сделал простой тест и все еще не могу заставить его передать.
Вот код для простого теста и представления:
def test_login(self):
user = self._create_new_user()
self.assertTrue(user.is_active)
login = self.client.login(username=user.username,
password=self.data['password1'])
self.failUnless(login, 'Could not log in')
response = self.client.get('/accounts/testlogin/')
self.assertEqual(response.status_code, 200)
@login_required
def testlogin(request):
print 'testlogin !! '
return HttpResponse('OK')
_create_new_user () сохраняет пользователя и существует тест в том методе, чтобы видеть, что это работает.
Тестовые сбои в ответе status_code, возвращаясь 302 и экземпляр ответа имеют HttpResponseRedirect, перенаправляет его, как будто не вошел в систему.
Какая-либо подсказка? Я пропускаю что-то?
Отношения Esteban
Вот ответ:
]Python 2.6.5 внес изменения в способ хранения файлов cookie, что слегка несовместимо с тестовым клиентом. Эта проблема был исправлен в 1.1.X и основной ветке, но это исправление еще не вошло в официальный выпуск .
Если вы используете 1.1.X и Python 2.6.5, у вас будут проблемы с любой тестовой активностью, связанной с файлами cookie . Вам нужно либо перейти на более раннюю версию Python, либо использовать ветку 1.1.X, а не версию 1.1.1.
Выпуск 1.1.2 (который будет включать исправление проблемы, которую вы описываете) будет выпущен одновременно с выпуском 1.2 - надеюсь, очень очень скоро.
С уважением, Расс Мэги% -)
Этот тестовый пример подходит мне:
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.test.client import Client
import unittest
class LoginTestCase(unittest.TestCase):
def setUp(self):
self.client = Client()
self.user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
def testLogin(self):
self.client.login(username='john', password='johnpassword')
response = self.client.get(reverse('testlogin-view'))
self.assertEqual(response.status_code, 200)
Я предлагаю вам (если вы их еще не используете) использовать reverse () и назовите свои URL-адреса. Таким образом, вы всегда будете уверены, что получите правильный URL.