Django: тест, переставший работать на представлении с @login_required

Я пытаюсь создать тест для представления, это украшено @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

14
задан Esteban Feldman 24 April 2010 в 16:32
поделиться

2 ответа

Вот ответ:

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 - надеюсь, очень очень скоро.

С уважением, Расс Мэги% -)

http://groups.google.com/group/django-users/browse_frm/thread/617457f5d62366ae/05f0c01fff0b9e6d?hl=en&lnk=gst&q=2.6.5#05f0c01effd

]
3
ответ дан 1 December 2019 в 08:52
поделиться

Этот тестовый пример подходит мне:

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.

28
ответ дан 1 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: