我已经开始使用Django的测试框架,并且一切正常,直到我开始测试已认证的页面。在Django测试框架中登录()
为了简单起见,我们说这是一个测试:
class SimpleTest(TestCase):
def setUp(self):
user = User.objects.create_user('temporary', '[email protected]', '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'], '[email protected]')
我运行这个测试后,它失败了,我看到打印登录的返回值()返回真,但response.content被重定向到登录页面(如果登录失败,则认证装饰器重定向到登录页面)。我已经把装饰一个破发点,做身份验证:
def authenticate(user):
if user.is_authenticated():
return True
return False
,它真的返回假。 test_secure_page()中的第4行正确检索用户。
这是视图功能:
@user_passes_test(authenticate, login_url='/users/login')
def secure(request):
user = request.user
return render_to_response('secure.html', {'email': user.email})
当然,如果我尝试登录,通过应用程序(外测试),一切工作正常。
请发布您正在测试的视图的代码。 –
@ S.Lott我没有测试我的登录页面(尽管我也尝试过,但这也不起作用),但其余部分是系统的“安全”部分。出于这个原因,我尝试使用login()。 – kevin
@kevin。问题是登录帖子会创建一个客户端使用的cookie。没有cookie,没有安全访问。 AFAIK,'login()'函数不会创建cookie并将其返回给客户端。你可以尝试重现Django文档中的例子,看看它们是否适合你? –