'AdminSiteTests'对象没有属性'user' Django单元测试

y53ybaqx  于 2023-03-13  发布在  Go
关注(0)|答案(1)|浏览(90)

我似乎不明白为什么我的单元测试在以下方面失败

Traceback (most recent call last):
  File "/app/core/tests/test_admin.py", line 26, in test_users_listed
    self.assertContains(res, self.user.name)
AttributeError: 'AdminSiteTests' object has no attribute 'user'

测试_管理员.py

from django.test import TestCase, Client
from django.contrib.auth import get_user_model
from django.urls import reverse

class AdminSiteTests(TestCase):

  def setup(self):
    self.client = Client()
    self.admin_user = get_user_model().objects.create_superuser(
      email='admin@test.com',
      password='test123'
    )
    self.client.force_login(self.admin_user)
    self.user = get_user_model().objects.create_user(
      email='test@test.com',
      password='test123',
      name='test name'
    )

  def test_users_listed(self):
    """Test that users are listed on user page"""
    url = reverse('admin:core_user_changelist')
    res = self.client.get(url)

    self.assertContains(res, self.user.name)

自我Assert包含(res,self.user.email)

管理员py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

from core import models

class UserAdmin(BaseUserAdmin):
  ordering = ['id']
  list_display = ['email', 'name']

admin.site.register(models.User, UserAdmin)

型号.py

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin


class UserManager(BaseUserManager):

  def create_user(self, email, password=None, **extra_fields):
    """Creates and saves a new user"""
    if not email:
      raise ValueError('Users must have a email address')
    user = self.model(email=self.normalize_email(email), **extra_fields)
    # Must encrypt password using set_password() that comes with BaseUserManager
    user.set_password(password)
    user.save(using=self._db)

    return user

  def create_superuser(self, email, password):
    """Creates and saves new superuser"""
    user = self.create_user(email, password)
    user.is_staff = True
    user.is_superuser = True
    user.save(using=self._db)

    return user

class User(AbstractBaseUser, PermissionsMixin):
  """Custom user model that supports using email instead of username"""
  email = models.EmailField(max_length=255, unique=True)
  name = models.CharField(max_length=255)
  is_active = models.BooleanField(default=True)
  is_staff = models.BooleanField(default=False)

  objects = UserManager()

  USERNAME_FIELD = 'email'

我在setup函数中创建了用户,用于我的其余测试,但我想也许没有调用setup函数来创建用户?
所有其他测试均通过。包括检查用户是否已创建的测试。如有任何帮助,将不胜感激

siv3szwd

siv3szwd1#

更详细地解释:

  1. Django使用python的unittest模块,并从那里导入TestCase类,可以在这里看到:
  2. TestCase类具有setUp方法,我们在这里使用该方法。

相关问题