Django:使用@login_required测试视图失败

时间:2010-04-24 16:32:06

标签: django session tdd login

我正在尝试为装饰的视图构建测试 @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()正在保存用户,并且内部有一个测试 看到它的方法正在发挥作用。

在response.status_code中测试失败,返回302和 响应实例是HttpResponseRedirect,将其重定向为 如果没有登录。

有任何线索吗?我错过了什么?

此致 埃斯特

3 个答案:

答案 0 :(得分:26)

这个测试用例对我有用:

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。

答案 1 :(得分:3)

以下是答案:

  

Python 2.6.5改变了方式   存储的cookie是巧妙的   与测试客户端不兼容。   这个问题已经解决了   1.1.X和trunk分支,但修复尚未使其成为正式的   释放。

     

如果您使用的是1.1.X和Python   2.6.5,您将遇到任何涉及的测试活动的问题   饼干。你要么降级,要么降级   Python,或者使用1.1.X分支   而不是1.1.1版本。

     

1.1.2版本(将包括   修复你描述的问题   与我们同时制作   发布1.2 - 希望非常非常   很快。

     

你的,Russ Magee% - )

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

答案 2 :(得分:0)

好的我面对同样的问题@resto解决了我的问题。

通过以下方式创建用户,让测试客户端让用户登录并获得除重定向之外的响应(302)

self.user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')