Django Unittest 302响应

时间:2018-04-23 11:51:03

标签: django django-unittest

我正在尝试为我的django应用程序进行单元测试。每当我尝试获取特定页面的请求时,它会将我重定向到登录页面。我已经在setUp中登录了一次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,它工作正常。非常感谢。

1 个答案:

答案 0 :(得分:1)

您需要使用v.computeIfPresent(anotherKey, (x, y) -> y + 1);来更正测试数据库的保存哈希密码:

set_password

没有它,您将普通密码存储到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哈希密码,这就是密码不匹配的原因。

来自docs

  

请记住,如果您希望测试用户拥有密码,则无法通过直接设置密码属性来设置用户密码 - 您必须使用set_password()函数存储正确的哈希密码。