Django测试登录

时间:2019-06-18 07:27:21

标签: django django-tests

我创建了一个用于创建用户和登录的测试。在我的设置中,我定义了min_length = 8的密码。但是测试通过了3个字符的密码。这是我的设置:

AUTH_PASSWORD_VALIDATORS = [
    {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', },
    {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 'OPTIONS': {'min_length': 8}},
    {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', },
    {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', },]

我的测试如下:

from django.test import TestCase
from django.contrib.auth import get_user_model


class UsersManagersTests(TestCase):

def test_create_user(self):
    custom_user = get_user_model()
    user = custom_user.objects.create_user(email='normal@user.com', password='foo')
    self.assertEqual(user.email, 'normal@user.com')
    self.assertTrue(user.is_active)
    self.assertFalse(user.is_staff)
    self.assertFalse(user.is_superuser)
    try:
        # username is None for the AbstractUser option
        # username does not exist for the AbstractBaseUser option
        self.assertEqual(user.username, '')
        # password will be encrypted with bcrypt
        self.assertNotEqual(user.password, 'foo')
    except AttributeError:
        pass
    with self.assertRaises(TypeError):
        custom_user.objects.create_user()
    with self.assertRaises(TypeError):
        custom_user.objects.create_user(username='')
    with self.assertRaises(TypeError):
        custom_user.objects.create_user(username='', password="foo")

def test_create_superuser(self):
    custom_user = get_user_model()
    admin_user = custom_user.objects.create_superuser(email='super@user.com', password='bla')
    self.assertEqual(admin_user.email, 'super@user.com')
    self.assertTrue(admin_user.is_active)
    self.assertTrue(admin_user.is_staff)
    self.assertTrue(admin_user.is_superuser)
    try:
        # username is None for the AbstractUser option
        # username does not exist for the AbstractBaseUser option
        self.assertEqual(admin_user.username, '')
    except AttributeError:
        pass
    with self.assertRaises(ValueError):
        custom_user.objects.create_superuser(
            email='super@user.com', password='bla', is_superuser=False)

def test_login_user(self):
    # Create an instance of a POST request.
    self.client.login(email="normal@user.com", password="foo")
    data = {'username': 'test name'}
    res = self.client.post('/accounts/login/', data)
    self.assertEqual(res.status_code, 200)

我想念什么?还是在测试过程中不考虑设置?

1 个答案:

答案 0 :(得分:1)

这是预期的,documented behaviour

  

默认情况下,在表单中createsuperuserchangepassword管理命令中使用验证程序来重置或更改密码。验证器不在模型级别应用,例如在User.objects.create_user()create_superuser()中应用,因为我们假设开发人员(而不是用户)在该级别与Django交互,并且因为模型验证不会自动运行作为创建模型的一部分。

相关问题