2010-04-24 72 views
8

我试图构建一个视图,使用 @login_required构建测试,因为我未能使其工作,我做了一个简单的测试 仍然不能让它通过。Django:使用@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

下面是答案:

的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#05f0c01fff0b9e6d

21

这测试用例工作对我来说:

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', '[email protected]', 'johnpassword') 

    def testLogin(self): 
     self.client.login(username='john', password='johnpassword') 
     response = self.client.get(reverse('testlogin-view')) 
     self.assertEqual(response.status_code, 200) 

我建议你(如果你还没有使用它们)使用反向()函数并命名的网址。通过这种方式,您可以确保始终获得正确的URL。

+0

@aeby回应:我复制并粘贴你的代码,仍然可以得到一个302,你在视图中使用了@login_required吗? – 2010-04-25 13:38:37

+0

Django 1.1版。1 - 双检查了TESTLOGIN画面从浏览器上进行,并且仅适用通过登录的用户 – 2010-04-25 14:04:10

+0

是我做的: 从django.contrib.auth.decorators导入已login_required @login_required 高清TESTLOGIN(请求): 返回HttpResponse(“测试”) – 2010-04-25 14:36:00

0

OK我面临@resto解决我的问题同样的问题。

创建用户下面这种方式,让测试客户端获取登录的用户,并得到比其他重定向(302)

self.user = User.objects.create_user('john', '[email protected]', 'johnpassword')