我正在尝试为装饰的视图构建测试 @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,将其重定向为 如果没有登录。
有任何线索吗?我错过了什么?
此致 埃斯特
答案 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% - )
答案 2 :(得分:0)
好的我面对同样的问题@resto解决了我的问题。
通过以下方式创建用户,让测试客户端让用户登录并获得除重定向之外的响应(302)
self.user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')