我正在尝试为我的Django应用程序进行单元测试。每当我尝试get请求到特定页面时,它都会将我重定向到登录页面。我已经在设置中登录一次Web应用程序,如下所示。我提到了许多问题,例如22208821,但无法正常工作。以下是我的代码。
from django.test import TestCase,Client
from django.contrib.auth.models import User
import unittest
class SimpleTest(TestCase):
def setUp(self):
self.client = Client()
self.username='testuser'
self.email = 'test@test.com'
self.password='12345'
self.user = User.objects.create_user(username=self.username,email=self.email,password=self.password)
login = self.client.login(username=self.username,password=self.password)
self.assertEqual(login,True)
def test_details(self):
response = self.client.get('/dashboard/')
print(response["location"])
self.assertEqual(response.status_code, 200)
我得到的输出是
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
/admin/login/?next=/dashboard/
F
======================================================================
FAIL: test_details (interview.tests.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "path", line 22, in test_details
self.assertEqual(response.status_code, 200)
AssertionError: 302 != 200
----------------------------------------------------------------------
Ran 1 test in 0.181s
感谢您的帮助!
编辑:似乎问题是我的观点需要员工状态,并且我使用create_user创建(默认情况下,用户不是员工(。相反,我使用了create_superuser,并且效果很好。非常感谢。
您需要使用set_password
纠正测试DB的保存密码:
def setUp(self):
self.client = Client()
self.username='testuser'
self.email = 'test@test.com'
self.password='12345'
self.user = User(username=self.username,email=self.email)
self.user.set_password(self.password)
self.user.save()
login = self.client.login(username=self.username,password=self.password)
self.assertEqual(login,True)
没有它,您将普通密码存储到password
字段中。但是client.login
在凭据验证之前散列密码,这就是密码不匹配的原因。
来自文档:
请记住,如果您希望测试用户拥有密码,则不能直接设置密码属性来设置用户的密码 - 您必须使用set_password((函数来存储正确的哈希德密码。