login() в фреймворке тестирования Django

Я начал использовать фреймворк тестирования Django, и все работало хорошо, пока я не начал тестировать аутентифицированные страницы.

Для простоты скажем, что это тест:

class SimpleTest(TestCase):
    def setUp(self):
        user = User.objects.create_user('temporary', 'temporary@gmail.com', 'temporary')

    def test_secure_page(self):
        c = Client()
        print c.login(username='temporary', password='temporary')
        response = c.get('/users/secure/', follow=True)
        user = User.objects.get(username='temporary')
        self.assertEqual(response.context['email'], 'temporary@gmail.com')

После того, как я запустил этот тест, он не работает, и я вижу, что при печати возвращаемого значения login() возвращается True, но response.content перенаправляется на страницу входа (если при входе не удаётся аутентифицировать декоратор перенаправляет на страницу входа). Я поставил точку перелома в декораторе, который делает аутентификацию:

def authenticate(user):
    if user.is_authenticated():
        return True
    return False

и он действительно возвращает False. Строка 4 в test_secure_page() правильно возвращает пользователя.

Это функция вида:

@user_passes_test(authenticate, login_url='/users/login')
def secure(request):
    user = request.user
    return render_to_response('secure.html', {'email': user.email})

Конечно, если я попытаюсь войти через приложение (вне теста), все работает нормально.

35
задан kevin 9 September 2011 в 21:46
поделиться